Go语言中,为了方便开发者使用,将IO操作封装在了如下几个包中:
io为IO原语(I/O primitives)提供基本的接口os File Reader Writerio/ioutil封装一些实用的I/O函数fmt实现格式化I/O,类似C语言中的printf和scanf format fmtbufio实现缓存I/O
基本的 IO 接口
Reader 接口
type Reader interface {
Read(p []byte) (n int, err error)
}
Writer接口
type Writer interface {
Writer(p []byte) (n int, err error)
}
哪些类型实现了Reader和Writer接口
例子
package main
import (
"fmt"
"io"
"log"
"os"
"strings"
)
func test_strings_Reader() {
r := strings.NewReader("hello world")
// 读取10个字符
buf := make([]byte, 10)
r.Read(buf)
fmt.Printf("string(buf): %v\n", string(buf))
}
func testCopy() {
r := strings.NewReader("hello world")
// 把r的内容拷贝输出 Stdout 标准输出
_, err := io.Copy(os.Stdout, r)
if err != nil {
log.Fatal(err)
}
}
func copyBuffer() {
r := strings.NewReader("hello world")
// 第一buf 让程序一次读取8个字符 之前为读一个写一个
buf := make([]byte, 8)
_, err := io.CopyBuffer(os.Stdout, r, buf)
if err != nil {
log.Fatal(err)
}
}
func main() {
// test_strings_Reader()
// testCopy()
copyBuffer()
}
ioutil包的使用
ioutil中封装好了很多的文件操作方法
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
)
// 读取文件的全部内容
func testReadAll() {
f, _ := os.Open("test.txt")
defer f.Close()
// 读取test.txt的全部内容
b, err := ioutil.ReadAll(f)
if err != nil {
fmt.Printf("err: %v\n", err)
}
fmt.Printf("string(b): %v\n", string(b))
}
// 打印当前程序目录下的所有文件
func testReadDir() {
fi, _ := ioutil.ReadDir(".")
for _, v := range fi {
fmt.Printf("v.Name(): %v\n", v.Name())
}
}
// 读文件
func testReadFile() {
b, _ := ioutil.ReadFile("test.txt")
// 要变成string才能输出 不然是一个buffer格式
fmt.Printf("string(b): %v\n", string(b))
}
// 写文件
func testWriteFile() {
// 覆盖原来内容
ioutil.WriteFile("test.txt", []byte("hello world"), 0664)
}
// 创建临时文件
func testTempFile() {
content := []byte("temporary file's content")
temfile, err := ioutil.TempFile("", "example")
if err != nil {
log.Fatal(err)
}
fmt.Printf("temfile.Name(): %v\n", temfile.Name()) // C:\Users\xxx\AppData\Local\Temp\example4170587381
defer os.Remove(temfile.Name())
if _, err = temfile.Write(content); err != nil {
log.Fatal(err)
}
}
func main() {
// testReadAll()
// testReadDir()
// testReadFile()
// testWriteFile()
testTempFile()
}