針對一些輸入/輸出的場景,通常可能會涉及到讀/寫操做。好比,對一段字符串進行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() }