Go IO Reader/Writer 接口从基础到企业级流式处理IO 接口是 Go 的另一核心抽象文件、网络、压缩全部用一样的 API。这篇讲清 io.Reader/Writer 与实际应用。一、接口定义typeReaderinterface{Read(p[]byte)(nint,errerror)}typeWriterinterface{Write(p[]byte)(nint,errerror)}二、实战bytes.Buffervarbuf bytes.Buffer buf.WriteString(hello)io.Copy(os.Stdout,buf)三、io.Copy 串联io.Copy(buf,src)// src → buf四、io.Piper,w:io.Pipe()gofunc(){deferw.Close()io.Copy(w,src)}()io.Copy(dst,r)五、io.LimitReaderr:io.LimitReader(src,1024)六、TeeReaderr:io.TeeReader(src,dst)// 同时读写七、bufio.Readerbr:bufio.NewReader(src)line,_:br.ReadString(\n)bufio 让 IO 减少 read 调用次数。八、零拷贝文件读取importsyscalldata,_:syscall.Mmap(...)// 直接使用内存九、io.WriterTo / io.ReaderFromtypeFilestruct{}func(f*File)WriteTo(w io.Writer)(int64,error){...}// io.CopyN etc. 可以快速从 src → dst十、io.MultiWriterm:io.MultiWriter(os.Stdout,logFile)m.Write([]byte(...))十一、gzip Streamgz,_:gzip.NewReader(src)defergz.Close()io.Copy(buf,gz)十二、JSON 流式编码enc:json.NewEncoder(w)for_,v:rangeitems{enc.Encode(v)}十三、企业实战HTTP Client 带宽限流importiorateLimited:io.LimitReader(src,100_000)// 100KB/s十四、HTTP/2 reader 实现普通 io.Reader 在 HTTP/2 上可以无改动。十五、踩坑清单未看 EOF 处理循环手动 break关闭 io.Closer 漏了用 defer Close()buffer 默认 4KB与底层对应LimitReader 与 TeeReader 模式顺序十六、性能对比bufiovsio.Copy小数据bufio 慢多一次分配大文件bufio 快系统调用次数少十七、未来Go 2.0 计划 io.DisposableReader。十八、总结与展望io 接口是抽象的核心。掌握 bufio、bytes.Buffer、io.Pipe、io.LimitReader 是流式编程的看家本领。十九、参考文献Go 标准库 io
