终端读写
操作终端相关文件句柄常量
os.Stdin // 标准输入 os.Stdout // 标准输出 (输出到终端) os.Stderr // 标准错误输出 (输出到终端)
fmt 常见用法
fmt.Scanln(&firstName, &lastName) // 从终端读取字符串(以空格分隔) fmt.Scanf("%s %s", &firstName, &lastName) // 作用同 fmt.Scanln(),但 fmt.Scanf() 既能读取字符串也能读取数字 fmt.Printf("Hi %s %s!\n", firstName, lastName) // 格式化输出 fmt.Sscanf(input, format, &f, &i, &s) // 从字符串中格式化读入(第一个参数表示要读取的字符串,第二个参数表示读取格式,后面的参数表示赋给哪些变量)
示例代码:
package main import "fmt" type Student struct{ Name string Age int Score float64 } func main(){ var s = "stu01 age is 18 score is 95.5" var stu Student fmt.Sscanf(s,"%s age is %d score is %f",&stu.Name,&stu.Age,&stu.Score) // 变量要传入地址 fmt.Println(stu) } // 运行结果: [root@NEO example01_Sscanf]# go run main/main.go {stu01 18 95.5} [root@NEO example01_Sscanf]#
带缓冲区的读写:
示例代码:(从标准输入中读取)
package main import ( "bufio" "os" "fmt" ) func main(){ reader := bufio.NewReader(os.Stdin) // go 的 struct 没有构造函数,所以 bufio 包中自己写了一个构造函数 NewReader,回一个 Reader实现的指针;bufio.NewReader() 需要传入一个 io.Reader 接口,这个接口中吸有一个 Read() 方法,而 os.Stdin 也实现 Read() 方法,即实现了 io.Reader 这个接口 fmt.Println("pls input:") str,err := reader.ReadString('\n') // 带缓存区的读取; ReadString() 中的参数是 byte 形式的 分隔符,所以要用 单引 if err != nil { fmt.Println("read string failed:",err) return } fmt.Printf("read string success,str: %s\n",str) } // 运行结果: [root@NEO example02_bufio01]# go run main/main.go pls input: i am neo read string success,str: i am neo [root@NEO example02_bufio01]#