Golang compress/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文件还原原始内容,常用于下载后解压或读取压缩日志。

立即学习“go语言免费学习笔记(深入)”;

注意点:

先用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可直接用于流式读取。实际项目中可封装成通用函数复用。

以上就是Golang compress/gzip文件压缩与解压实践的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1413405.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月16日 07:12:42
下一篇 2025年12月16日 07:12:52

相关推荐

发表回复

登录后才能评论
关注微信