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

在Go语言中处理gzip压缩与解压非常方便,标准库compress/gzip结合os、io等包即可实现文件的压缩与解压。下面介绍常见使用场景和代码实践。
压缩文件(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
微信扫一扫
支付宝扫一扫