Go中的IO包

io 包为I/O原语提供根本的接口,包装了这些原语的已有实现。

在 io 包中最重要的是两个接口:Reader 和 Writer 接口。你只有满足这两个接口,就能够应用 IO 包的性能。

Reader 应用

利用 Reader 能够容易进行流式数据传输。Reader 办法外部是被循环调用,每次迭代,它会从数据源读取一块数据放入缓冲区 p (即 Read 的参数 p)中,直到返回 io.EOF 谬误时进行。

通过 string.NewReader(string) 创立一个字符串读取器。

func main() {    reader := strings.NewReader("This is Golang language.")    p := make([]byte, 8)    for {        n, err := reader.Read(p)        if err != nil {            if err == io.EOF {                fmt.Println("EOF:", n)                break            }            fmt.Println(err)            os.Exit(1)        }        fmt.Println(string(p[:n]))    }}

后果:

This is Golang language.EOF: 0

Writer

示意一个编写器,它从缓冲区读取数据,并将数据写入指标资源。

func main() {    proverbs := []string{"GET", "POST", "PUT", "DELETE", "PATCH", ""}    var writer bytes.Buffer    for _, p := range proverbs {        n, err := writer.Write([]byte(p))        if err != nil {            fmt.Println(err)            os.Exit(1)        }        if n != len(p) {            fmt.Println("failed to write data")            os.Exit(1)        }        fmt.Println(writer.String())    }}

os.File

示意本地零碎上的文件。它实现了 io.Readerio.Writer ,因而能够在任何 io 上下文中应用。也能够读取文件并打印其内容。

func main() {    file, err := os.Create("./hello.txt")    defer file.Close()      p := make([]byte, 6)      // file 类型实现了 io.Writer      n, err := file.Write([]byte(p))}

能够用作读取器来从本地文件系统读取文件的内容

func main() {    file, err := os.Open("./proverbs.txt")      defer file.Close()      p := make([]byte, 6)      n, err := file.Read(p)}

ioutil

能够应用函数 ReadFile 将文件内容加载到 []byte

func main() {  bytes, err := ioutil.ReadFile("./hello.txt") //1.16开始曾经弃用,间接os.ReadFile    file, _ := os.ReadFile("./hello.text")    fmt.Print(string(file))}

还有其余类型如PipeReader 和 PipeWriter 类型等

更多文章收录于Github:https://github.com/metashops/GoFamily

本文由mdnice多平台公布