// ReadOne 读取到file中,再利用ioutil将file间接读取到[]byte中func ReadOne() string { file, err := os.Open("file/test") if err != nil { fmt.Println("read file fail", err) return "" } defer file.Close() content, err := ioutil.ReadAll(file) if err != nil { fmt.Println("read to fd fail", err) return "" } return string(content)}// WriteOne 应用 bufio.NewWriter 写文件func WriteOne() { fileName := "file/test3" file, err3 := os.Create(fileName) //创立文件 defer file.Close() if err3 != nil { fmt.Println("create file fail") } writer := bufio.NewWriter(file) //创立新的 Writer 对象 _, err := writer.WriteString("bufferedn") if err != nil { fmt.Println("write fail") } writer.Flush()}// ReadTwo 利用ioutil.ReadFile间接从文件读取到[]byte中func ReadTwo() string { f, err := ioutil.ReadFile("file/test") if err != nil { fmt.Println("read fail", err) } return string(f)}// WriteTwo 应用 ioutil.WriteFile 写文件func WriteTwo() { fileName := "file/test2" strTest := "测试测试" var d = []byte(strTest) err := ioutil.WriteFile(fileName, d, 0666) if err != nil { fmt.Println("write fail") } fmt.Println("write success")}
图一、io.Reader/Writer之间的关系
io库
io 库属于底层接口定义库。它的作用次要是定义个 I/O 的根本接口和个根本常量,并解释这些接口的性能。在理论编写代码做 I/O 操作时,这个库个别只用来调用它的常量和接口定义,比方用 io.EOF 判断是否曾经读取完,用 io.Reader 做变量的类型申明。
os 库
os 库次要是解决操作系统操作的,它作为Go程序和操作系统交互的桥梁。创立文件、关上或者敞开文件、Socket等等这些操作和都是和操作系统挂钩的,所以都通过 os 库来执行。
ioutil库
ioutil 库是一个有工具包,它提供了很多应用的 IO 工具函数,例如 ReadAll、ReadFile、WriteFile、ReadDir。惟一须要留神的是它们都是一次性读取和一次性写入,所以应用时,尤其是把数据从文件里一次性读到内存中时须要留神文件的大小。
bufio库
bufio,能够了解为在 io 库的根底上额定封装加了一个缓存层,它提供了很多按行进行读写的函数,从io库的按字节读写变为按行读写对写代码来说还是不便了不少。
bytes 和 strings 库
bytes 和 strings 库里的 bytes.Reader 和string.Reader,它们都实现了 io.Reader 接口,也都提供了NewReader办法用来从 []byte 或者 string 类型的变量间接构建出相应的Reader实现。
参考:
https://www.cnblogs.com/wangq...
https://www.jb51.net/article/...