Golang-Reader和Writer


Go语言的io包提供了读写操作的接口,其中最常用的就是ReaderWriter接口。ReaderWriter接口可以用来从一个数据源读取数据,或者向一个目标写入数据,不同的实现方式可以适用于不同的数据源和目标。

1. Reader

Reader接口定义了一个Read方法,用来从数据源中读取数据。具体来说,Read方法接收一个字节数组b,并返回读取到的字节数n和可能出现的错误err。如果读取完毕,Read方法将返回一个io.EOF错误。

type Reader interface {
    Read(p []byte) (n int, err error)
}

使用Reader接口可以将不同类型的数据源抽象为相同的接口,从而使得代码更具有通用性和复用性。例如,可以通过Reader接口来读取文件、网络连接、内存中的字节数组等数据源。

从一个文件中读取数据:

package main

import (
    "fmt"
    "os"
)

func main() {
    // 打开文件
    file, err := os.Open("example.txt")
    if err != nil {
        fmt.Println("Error opening file:", err)
        return
    }
    defer file.Close()

    // 读取文件内容
    buffer := make([]byte, 1024)
    n, err := file.Read(buffer)
    if err != nil {
        fmt.Println("Error reading file:", err)
        return
    }

    // 输出读取到的内容
    fmt.Println(string(buffer[:n]))
}

2. Writer

Writer接口定义了一个Write方法,用来向目标写入数据。具体来说,Write方法接收一个字节数组b,并返回写入的字节数n和可能出现的错误err。如果写入过程中发生错误,err不为nil,否则errnil

type Writer interface {
    Write(p []byte) (n int, err error)
}

使用Writer接口可以将不同类型的数据目标抽象为相同的接口,从而使得代码更具有通用性和复用性。例如,可以通过Writer接口将数据写入到文件、网络连接、内存中的字节数组等目标。

将数据写入到一个文件中:

package main

import (
    "fmt"
    "os"
)

func main() {
    // 创建文件
    file, err := os.Create("example.txt")
    if err != nil {
        fmt.Println("Error creating file:", err)
        return
    }
    defer file.Close()

    // 向文件写入数据
    message := []byte("Hello, world!")
    n, err := file.Write(message)
    if err != nil {
        fmt.Println("Error writing to file:", err)
        return
    }

    // 输出写入的字节数
    fmt.Println(n, "bytes written successfully.")
}

Write方法并不保证一次性写入整个字节数组,因此在使用Writer接口时需要注意检查写入的字节数和可能出现的错误。


文章作者: foursevenlove
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 foursevenlove !
  目录