登录
首页 >  Golang >  Go教程

Golanggzip压缩解压实战详解

时间:2025-12-14 16:37:32 270浏览 收藏

推广推荐
免费电影APP ➜
支持 PC / 移动端,安全直达

一分耕耘,一分收获!既然打开了这篇文章《Golang gzip压缩解压实战教程》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

Go语言中使用compress/gzip包实现文件及内存数据的压缩解压。1. 压缩文件:打开源文件,创建.gz目标文件,通过gzip.NewWriter写入并调用Close()完成压缩。2. 解压文件:用gzip.NewReader读取.gz文件,io.Copy将解压数据写入新文件。3. 内存操作:bytes.Buffer结合gzip.Writer/Reader实现字节流压缩解压,适用于API响应等场景。关键点:Writer必须Close以触发压缩,Reader可直接流式读取,建议封装为通用函数复用。

Golang compress/gzip文件压缩与解压实践

在Go语言中处理gzip压缩与解压非常方便,标准库compress/gzip结合osio等包即可实现文件的压缩与解压。下面介绍常见使用场景和代码实践。

压缩文件(File to .gz)

将普通文件压缩为gzip格式,通常用于日志归档或网络传输前的数据压缩。

关键步骤:

  • 打开源文件用于读取
  • 创建目标.gz文件
  • gzip.NewWriter包装输出文件
  • 将源数据拷贝到gzip writer
  • 记得调用Close()触发压缩完成
func compressFile(src, dst string) error {
    srcFile, err := os.Open(src)
    if err != nil {
        return err
    }
    defer srcFile.Close()

    dstFile, err := os.Create(dst)
    if err != nil {
        return err
    }
    defer dstFile.Close()

    gzWriter := gzip.NewWriter(dstFile)
    defer gzWriter.Close()

    _, err = io.Copy(gzWriter, srcFile)
    return err
}

解压文件(.gz to File)

从gzip文件还原原始内容,常用于下载后解压或读取压缩日志。

注意点:

  • 先用gzip.NewReader解析.gz文件
  • 解压后写入新文件
  • gzip.Reader也需要关闭
func decompressFile(src, dst string) error {
    srcFile, err := os.Open(src)
    if err != nil {
        return err
    }
    defer srcFile.Close()

    gzReader, err := gzip.NewReader(srcFile)
    if err != nil {
        return err
    }
    defer gzReader.Close()

    dstFile, err := os.Create(dst)
    if err != nil {
        return err
    }
    defer dstFile.Close()

    _, err = io.Copy(dstFile, gzReader)
    return err
}

内存中压缩/解压

适用于不需要落地文件的场景,比如API响应压缩或配置加载。

使用bytes.Buffer作为缓冲区:

// 压缩字节流
func gzipData(data []byte) ([]byte, error) {
    var buf bytes.Buffer
    writer := gzip.NewWriter(&buf)
    _, err := writer.Write(data)
    if err != nil {
        return nil, err
    }
    writer.Close() // 必须调用
    return buf.Bytes(), nil
}

// 解压字节流
func gunzipData(data []byte) ([]byte, error) {
    reader, err := gzip.NewReader(bytes.NewReader(data))
    if err != nil {
        return nil, err
    }
    defer reader.Close()
    return io.ReadAll(reader)
}

基本上就这些。核心是理解gzip.Writer需要显式关闭才能完成压缩流程,而gzip.Reader可直接用于流式读取。实际项目中可封装成通用函数复用。

好了,本文到此结束,带大家了解了《Golanggzip压缩解压实战详解》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>