全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何在Golang中实现文件压缩操作_使用compress/gzip处理文件

Go中压缩文件需用gzip.NewWriter包装目标文件,通过io.Copy写入并必须调用gzw.Close();可选设置Header.Name和ModTime保留原名与时间戳,并应校验Close()错误及输出文件有效性。

在 Go 中使用 compress/gzip 压缩文件,核心是将文件内容写入一个 gzip writer,再保存为 .gz 文件。关键在于正确打开源文件、创建 gzip 写入器、复制数据,并及时关闭资源。

压缩单个文件为 .gz 格式

这是最常见需求:读取一个普通文件(如 data.txt),生成对应的 data.txt.gz

  • os.Open 打开源文件,os.Create 创建目标 .gz 文件
  • gzip.NewWriter 包装目标文件句柄,得到可写的 gzip 流
  • io.Copy 将源文件内容流式写入 gzip writer
  • 必须调用 gzw.Close() —— 否则压缩头/尾可能不完整,解压会失败

保留原始文件名和修改时间(可选增强)

默认 gzip 文件不记录原始文件名和时间戳。若需兼容传统工具(如 Linux gunzip -l 显示原名),可设置 Header

  • 创建 gzip.Writer 后,修改其 Header.Name 字段(如设为 "data.txt"
  • 通过 os.Stat 获取源文件的 ModTime(),赋给 Header.ModTime
  • 注意:Name 是 UTF-8 字符串,不能含路径(只留文件名)

压缩后校验与错误处理

生产环境建议加入基础检查:

  • 检查 io.Copy 返回的字节数是否等于源文件大小(可选,用于确认无截断)
  • 捕获 gzw.Close() 的 error —— 它会触发实际压缩和写入 footer,可能失败(如磁盘满)
  • 压缩完成后,可用 os.Stat 验证目标文件是否存在且大小 > 0

简单示例代码(可直接运行)

// compress.go

package main

import (
  "os"
  "io"
  "os/exec"
  "compress/gzip"
  "fmt"
)

func main() {
  src, err := os.Open("input.txt")
  if err != nil {
    panic(err)
  }
  defer src.Close()
  
  dst, err := os.Create("input.txt.gz")
  if err != nil {
    panic(err)
  }
  defer dst.Close()
  
  gzw := gzip.NewWriter(dst)
  // 可选:添加原始文件名和时间
  if info, _ := src.Stat(); info != nil {
    gzw.Header.Name = info.Name()
    gzw.Header.ModTime = info.ModTime()
  }
  
  if _, err := io.Copy(gzw, src); err != nil {
    panic(err)
  }
  
  if err := gzw.Close(); err != nil {
    panic(err)
  }
  fmt.Println("压缩完成:input.txt.gz")
}

不复杂但容易忽略


# linux  # go  # golang  # 字节  # 工具  # ai  # 解压  # 文件压缩  # if  # Error  # 字符串  # nil  # copy  # input  # 可选  # 压缩文件  # 这是  # 句柄  # 设为  # 可直接  # 它会  # 最常见  # 关键在于  # 一个普通 


相关文章: 教学论文网站制作软件有哪些,写论文用什么软件 ?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  制作网站公司那家好,网络公司是做什么的?  建站DNS解析失败?如何正确配置域名服务器?  MySQL查询结果复制到新表的方法(更新、插入)  Swift中switch语句区间和元组模式匹配  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  免费网站制作appp,免费制作app哪个平台好?  如何高效搭建专业期货交易平台网站?  常州自助建站费用包含哪些项目?  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何快速上传建站程序避免常见错误?  如何确保西部建站助手FTP传输的安全性?  模具网站制作流程,如何找模具客户?  广州商城建站系统开发成本与周期如何控制?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  网站微信制作软件,如何制作微信链接?  c++怎么用jemalloc c++替换默认内存分配器【性能】  制作网站怎么制作,*游戏网站怎么搭建?  如何在腾讯云服务器快速搭建个人网站?  c# 服务器GC和工作站GC的区别和设置  重庆市网站制作公司,重庆招聘网站哪个好?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  临沂网站制作企业,临沂第三中学官方网站?  建站主机选虚拟主机还是云服务器更好?  家庭服务器如何搭建个人网站?  网站app免费制作软件,能免费看各大网站视频的手机app?  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  Swift开发中switch语句值绑定模式  如何正确选择百度移动适配建站域名?  如何在服务器上配置二级域名建站?  建站之星代理商如何保障技术支持与售后服务?  如何通过虚拟主机空间快速建站?  如何在阿里云部署织梦网站?  如何在万网自助建站中设置域名及备案?  如何将凡科建站内容保存为本地文件?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  一键网站制作软件,义乌购一件代发流程?  家庭建站与云服务器建站,如何选择更优?  如何在橙子建站上传落地页?操作指南详解  如何通过宝塔面板实现本地网站访问?  小建面朝正北,A点实际方位是否存在偏差?  内网网站制作软件,内网的网站如何发布到外网?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  如何注册花生壳免费域名并搭建个人网站?  如何选择香港主机高效搭建外贸独立站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。