go语言中的io包(方便记忆查询)

83 阅读2分钟

Go 语言中的 io 包提供了基本的 I/O 接口和功能,主要用于抽象底层操作系统提供的 I/O 原语。以下是 io 包中的主要内容及其简要总结:

常量

  • SeekStart: 从文件开头开始
  • SeekCurrent: 从当前位置开始
  • SeekEnd: 从文件末尾开始

错误变量

  • ErrShortWrite: 写操作未写入所有字节
  • ErrInvalidWrite: 写入结果无效
  • ErrShortBuffer: 缓冲区太短
  • EOF: 读取到文件末尾
  • ErrUnexpectedEOF: 读取时意外遇到 EOF
  • ErrNoProgress: 多次读取没有进展

主要接口

  • Reader: 读取数据
  • Writer: 写入数据
  • Closer: 关闭资源
  • Seeker: 定位读取/写入位置

组合接口

  • ReadWriter: 包含 ReaderWriter
  • ReadCloser: 包含 ReaderCloser
  • WriteCloser: 包含 WriterCloser
  • ReadWriteCloser: 包含 ReaderWriterCloser
  • ReadSeeker: 包含 ReaderSeeker
  • ReadSeekCloser: 包含 ReaderSeekerCloser
  • WriteSeeker: 包含 WriterSeeker
  • ReadWriteSeeker: 包含 ReaderWriterSeeker

特殊接口

  • ReaderFrom: 从另一个 Reader 读取数据
  • WriterTo: 写数据到另一个 Writer
  • ReaderAt: 从指定位置读取数据
  • WriterAt: 在指定位置写入数据
  • ByteReader: 读取单个字节
  • ByteWriter: 写入单个字节
  • RuneReader: 读取单个 Unicode 字符
  • StringWriter: 写入字符串

辅助函数

  • ReadAtLeast: 从 Reader 读取至少指定字节数
  • ReadFull: 读取固定长度的数据
  • CopyN: 复制指定字节数
  • Copy: 复制数据直到 EOF 或错误
  • CopyBuffer: 使用指定缓冲区复制数据
  • LimitReader: 限制读取数据的字节数
  • NewSectionReader: 创建一个在指定区间读取的 Reader
  • TeeReader: 同时读取和写入数据
  • Discard: 丢弃写入的数据
  • NopCloser: 创建一个不做任何操作的 Close 方法的 Reader
  • ReadAll: 读取所有数据到内存

示例代码

package main

import (
    "io"
    "os"
)

func main() {
    // 读取文件示例
    file, err := os.Open("example.txt")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    buf := make([]byte, 1024)
    n, err := file.Read(buf)
    if err != nil && err != io.EOF {
        panic(err)
    }

    // 写入文件示例
    fileOut, err := os.Create("output.txt")
    if err != nil {
        panic(err)
    }
    defer fileOut.Close()

    _, err = fileOut.Write(buf[:n])
    if err != nil {
        panic(err)
    }
}

记忆总结

  • 常用接口: Reader, Writer, Closer, Seeker
  • 常用函数: Copy, ReadAll, ReadFull
  • 常见错误: EOF, ErrShortWrite, ErrUnexpectedEOF