Golang中如何实现网络数据的压缩和解压缩?代码举例讲解

在Golang中,可以使用compress/gzip实现网络数据的压缩和解压缩。代码示例:

服务器:

go
// gzip压缩器
gzipWriter := gzip.NewWriter(w)
defer gzipWriter.Close()

// 将压缩器作为Writer接口传递给后续处理函数
handleRequest(gzipWriter, r)

func handleRequest(w io.Writer, r *http.Request) {
    // 写入的数据将被gzip压缩
    w.Write([]byte("data"))
}

服务器使用gzip.NewWriter创建一个gzip压缩器,并在处理HTTP请求时将其作为Writer接口传递给handleRequest。这个时候写入gzipWriter的数据会被压缩,传输给客户端。

客户端:

go  
// 读取gzip压缩数据
response, err := http.Get("http://server_url")
if err != nil {
    log.Fatal(err)
}
defer response.Body.Close()

// 创建gzip解压缩器
gzipReader, err := gzip.NewReader(response.Body)
if err != nil {
    log.Fatal(err) 
}
defer gzipReader.Close()

// 读取解压缩后的数据
body := io.LimitReader(gzipReader, 512) 
data, err := ioutil.ReadAll(body)
if err != nil {
    log.Fatal(err)
}

客户端发起请求获取数据,然后创建gzip.NewReader对读取到的压缩数据进行解压缩,最后读取解压缩后的数据。