针对一些输入/输出的场景,通常可能会涉及到读/写操做。好比,对一段字符串进行gzip
压缩,或者解压缩,golang
下主要经过两个接口来实现:golang
读的接口声明以下:函数
type Reader interface { Read(p []byte) (n int, err error) }
写接口声明以下:code
type Writer interface { Write(p []byte) (n int, err error) }
结合compress/gzip
包,咱们来了解一下这两个接口。gzip
中包括两个功能:压缩和解压缩。对象
解压缩的状况,gzip
提供了gzip.Reader
对象,用来从压缩的内容中读区被压缩前的原始内容。对象的建立函数以下:接口
func NewReader(r io.Reader) (*Reader, error)
压缩的状况也相似:ip
func NewWriter(w io.Writer) *Writer
对一个被gzip
压缩的字符串,该如何转换为io.Reader
/io.Writer
呢? bytes
包提供了Buffer
对象,就实现了这两个接口。字符串
拿压缩的状况j举例:string
func gzip(src string) string { srcBuffer := bytes.NewBuffer() gzipWriter := gzip.NewWriter([]byte(src)) gzipWriter.Close() return srcBuffer.String() }