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