#读取用户的输入
我们如何读取用户的键盘(控制台)输入呢?
从键盘和标准输入 `os.Stdin` 读取输入,最简单的办法是使用 `fmt` 包提供的 Scan 和 Sscan 开头的函数
# 文件读写
在 Go 语言中,文件使用指向 `os.File` 类型的指针来表示的,也叫做文件句柄
标准输入 `os.Stdin` 和标准输出 `os.Stdout`,他们的类型都是 `*os.File`
inputFile, inputError = os.Open("input.dat")。
如果文件打开正常,我们就使用 defer inputFile.Close() 语句确保在程序退出前关闭该文件。
然后,我们使用 bufio.NewReader 来获得一个读取器变量。
通过使用 bufio 包提供的读取器(写入器也类似),如上面程序所示,
我们可以很方便的操作相对高层的 string 对象,而避免了去操作比较底层的字节
inputFile, inputError := os.Open("input.dat")
if inputError != nil {
fmt.Printf("An error occurred on opening the inputfile\n" +
"Does the file exist?\n" +
"Have you got acces to it?\n")
return
}
defer inputFile.Close()
inputReader := bufio.NewReader(inputFile)
for {
inputString, readerError := inputReader.ReadString('\n')
fmt.Printf("The input was: %s", inputString)
if readerError == io.EOF {
return
}
}
**将整个文件的内容读到一个字符串里**
使用 `io/ioutil` 包里的 `ioutil.ReadFile()` 方法,
该方法第一个返回值的类型是 `[]byte`,里面存放读取到的内容,
第二个返回值是错误,如果没有错误发生,第二个返回值为 nil。
类似的,函数 `WriteFile()` 可以将 `[]byte` 的值写入文件
**带缓冲的读取**
在很多情况下,文件的内容是不按行划分的,或者干脆就是一个二进制文件。
在这种情况下,`ReadString()` 就无法使用了,我们可以使用 `bufio.Reader` 的 `Read()`,
它只接收一个参数 变量 n 的值表示读取到的字节数
**按列读取文件中的数据**
,你可以使用 `fmt` 包提供的以 FScan 开头的一系列函数来读取他们,
我们将 3 列的数据分别读入变量 v1、v2 和 v3 内,然后分别把他们添加到切片的尾部
## `compress` 包:读取压缩文件
`compress` 包提供了读取压缩文件的功能,支持的压缩文件格式为:bzip2、flate、gzip、lzw 和 zlib。
## 写文件
outputWriter := bufio.NewWriter(outputFile)
## 文件拷贝
io.Copy(dst, src)
# 从命令行读取参数
os 包中有一个 string 类型的切片变量 `os.Args`
flag 包
# 用 buffer 读取文件
如果不加参数,那么你输入什么屏幕就打印什么。参数被认为是文件名,如果文件存在的话就打印文件内容到屏幕
# 用切片读写文件
# 用 defer 关闭文件