Go的io标准库
qingheluo2024-07-02清河洛298
io包为I/O原语提供基本接口,将这些原语的现有实现包装到实现了抽象功能的接口中,实现了多系统的兼容官方特别注明,这些实现对于并行执行不一定安全常用的预定义错误
EOF 当没有更多输入时Read的返回
ErrClosedPipe 对封闭管道进行读或写操作
ErrShortBuffer 读取需要比提供的缓冲区更长的缓冲区
ErrShortWrite 写入接受的字节数少于请求的字节数
常用接口和结构体为了简化文章字符,以下接口或结构体的定义省略type和interface|struct关闭接口
Closer { Close() error }
读写偏...
io包为I/O原语提供基本接口,将这些原语的现有实现包装到实现了抽象功能的接口中,实现了多系统的兼容
官方特别注明,这些实现对于并行执行不一定安全
常用的预定义错误
EOF 当没有更多输入时Read的返回 ErrClosedPipe 对封闭管道进行读或写操作 ErrShortBuffer 读取需要比提供的缓冲区更长的缓冲区 ErrShortWrite 写入接受的字节数少于请求的字节数
常用接口和结构体
为了简化文章字符,以下接口或结构体的定义省略type和interface|struct
关闭接口
Closer { Close() error }
读写偏移量接口
Seeker { Seek(offset int64, whence int) (int64, error) } 下一次读或写的位置偏移量设置为offset whence表示相对于文件什么位置计算偏移量,值为预定于常量 io.SeekStart =0 表示文件开头 io.SeekCurrent=1 表示当前位置 io.SeekEnd =2 表示文件末尾 返回读或写操作后相对于文件开头的偏移量和错误
读相关
接口 Reader { Read (p []byte) (n int, err error) } 读取len(p)字节的数据并写入到p,将返回读取的字节数 ReaderAt { ReadAt(p []byte, off int64) (n int, err error) } 从off偏移量读取len(p)字节的数据并写入到p,将返回读取的字节数 ReaderFrom { ReadFrom(r Reader) (n int64, err error) } 从r读取数据并返回读取的字节数 RuneReader { ReadRune() (r rune, size int, err error) } 每次执行读取单个编码的Unicode字符,并返回该字符及其字节大小 ByteReader { ReadByte() (byte, error) } 每次执行读取并返回下一个字节 结构体 LimitedReader{ R Reader N int64 } Read(p []byte) (n int, err error) :每次Read()都会更新N值,当N<=0是返回EOF PipeReader struct { } Close() CloseWithError(err error) 关闭管道的读,后续读操作返回指定的err而不是ErrClosedPipe Read(data []byte) (n int, err error) 从管道读取,阻塞直到读取大小为len(data)或写入端关闭
写相关
接口 Writer { Write (p []byte) (n int, err error) } 将p的len(p)个字节数据写入数据流,返回写入的字节数 WriterAt { WriteAt(p []byte, off int64) (n int, err error) } 将p的len(p)个字节数据从off偏移量开始写入数据流,返回写入的字节数 WriterTo { WriteTo(w Writer) (n int64, err error) } 将数据写入w直到没有更多的数据或发生错误,返回写入的字节数 StringWriter { WriteString(s string) (n int, err error) } 将字符串s的内容写入数据流,返回写入的字节数 ByteWriter { WriteByte(c byte) error } 写入指定的一个字节 结构体 OffsetWriter{ } 从指定偏移量的位置开始写入 使用io.NewOffsetWriter(w WriterAt, off int64) *OffsetWriter创建 Seek(offset int64, whence int) (int64, error) Write(p []byte) (n int, err error) WriteAt(p []byte, off int64) (n int, err error) PipeWriter struct { } Close() CloseWithError(err error) 关闭管道的写,后续写操作返回指定的err而不是ErrClosedPipe Write(data []byte) (n int, err error) 将数据写入管道,阻塞直到读取器读取了所有数据或读取端关闭
读写等整合相关
根据名称就可以看出来,是将上面的接口或结构体进行了整合
ReadCloser :整合了Reader和Closer NopCloser(r Reader) ReadCloser ReadSeekCloser :整合了Reader、Seeker和Closer ReadSeeker ReadWriteCloser ReadWriteSeeker ReadWriter WriteCloser WriteSeeker
包的导出方法
Copy(dst Writer, src Reader) (written int64, err error) 将数据从src复制到dst,返回复制的字节数 CopyBuffer(dst Writer, src Reader, buf []byte) (written int64, err error) 与Copy相同,只是它通过指定的缓冲区执行,而不是分配临时缓冲区 如果buf为nil,则自动分配一个 如果buf的长度为零,则会死机 CopyN(dst Writer, src Reader, n int64) (written int64, err error) 将n个字节从src复制到dst,返回复制的字节数 Pipe() (*PipeReader, *PipeWriter) 创建内存同步管道 管道上的读和写是匹配的。每次写入都会阻塞,直到一个或多个对写入数据的读取将数据读取完毕 相当于数据直接从Write复制到相应的Read而没有内部缓冲 ReadAll(r Reader) ([]byte, error) 从r读取全部数据,并返回读取的数据 ReadAtLeast(r Reader, buf []byte, min int) (n int, err error) 从r读取数据到buf,直到它至少读取了min字节或遇到EOF错误 返回复制的字节数,如果读取的字节较少,则返回错误。仅当未读取字节时,错误才会被删除 ReadFull(r Reader, buf []byte) (n int, err error) 从r中读取len(buf)字节数据到buf,返回复制的字节数 WriteString(w Writer, s string) (n int, err error) 将字符串s的内容写入w,返回写入字节数