Golang中如何实现网络数据的压缩和解压缩?

在 Golang 中,标准库已经内置了多种压缩算法和解压缩算法,包括 gzip、zlib、flate 等,我们可以通过导入相应的包并使用相关函数来进行数据的压缩和解压缩。例如,使用 gzip 包可以通过以下代码来进行数据的压缩和解压缩:

import (
    "compress/gzip"
    "bytes"
)

func compressData(data []byte) ([]byte, error) {
    var buf bytes.Buffer
    gzipWriter := gzip.NewWriter(&buf)
    _, err := gzipWriter.Write(data)
    if err != nil {
        return nil, err
    }
    gzipWriter.Close()
    return buf.Bytes(), nil
}

func decompressData(data []byte) ([]byte, error) {
    buf := bytes.NewBuffer(data)
    gzipReader, err := gzip.NewReader(buf)
    if err != nil {
        return nil, err
    }
    defer gzipReader.Close()
    var result bytes.Buffer
    _, err = result.ReadFrom(gzipReader)
    if err != nil {
        return nil, err
    }
    return result.Bytes(), nil
}