首页 > 后端开发 > Golang > 正文

Golang文件压缩解压功能实现项目

P粉602998670
发布: 2025-10-13 18:17:02
原创
683人浏览过
Go语言通过archive/zip和compress/gzip包实现文件压缩解压,支持ZIP多文件打包与GZIP单文件压缩,结合合理项目结构可构建高效工具。

golang文件压缩解压功能实现项目

在Go语言开发中,处理文件的压缩与解压是常见的需求,比如日志归档、数据备份或文件传输优化。Golang标准库提供了强大的支持,尤其是 archive/zipcompress/gzip 包,可以轻松实现 zip 和 gzip 格式的压缩与解压功能。下面是一个完整的项目结构设计与核心代码实现,帮助你快速构建一个实用的文件压缩解压工具

1. 支持 ZIP 压缩与解压

ZIP 是最常用的压缩格式,适用于多个文件打包。Golang 的 archive/zip 包支持读写 ZIP 文件。

压缩多个文件为 ZIP

以下函数将指定路径的多个文件打包成一个 ZIP 文件:

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

func CompressToZip(filePaths []string, destZip string) error {
    zipfile, err := os.Create(destZip)
    if err != nil {
        return err
    }
    defer zipfile.Close()
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">archive := zip.NewWriter(zipfile)
defer archive.Close()

for _, filePath := range filePaths {
    err = addToZip(archive, filePath)
    if err != nil {
        return err
    }
}
return nil
登录后复制

}

func addToZip(archive *zip.Writer, filename string) error { file, err := os.Open(filename) if err != nil { return err } defer file.Close()

info, err := file.Stat()
if err != nil {
    return err
}

header, err := zip.FileInfoHeader(info)
if err != nil {
    return err
}
header.Name = filepath.Base(filename)
header.Method = zip.Deflate

writer, err := archive.CreateHeader(header)
if err != nil {
    return err
}

_, err = io.Copy(writer, file)
return err
登录后复制

}

解压 ZIP 文件到目标目录

将 ZIP 文件中的内容逐个提取出来:

笔目鱼英文论文写作器
笔目鱼英文论文写作器

写高质量英文论文,就用笔目鱼

笔目鱼英文论文写作器 87
查看详情 笔目鱼英文论文写作器
func DecompressZip(zipPath, destDir string) error {
    r, err := zip.OpenReader(zipPath)
    if err != nil {
        return err
    }
    defer r.Close()
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">for _, file := range r.File {
    filePath := filepath.Join(destDir, file.Name)
    if file.FileInfo().IsDir() {
        os.MkdirAll(filePath, os.ModePerm)
        continue
    }

    if err := os.MkdirAll(filepath.Dir(filePath), os.ModePerm); err != nil {
        return err
    }

    outFile, err := os.Create(filePath)
    if err != nil {
        return err
    }

    rc, err := file.Open()
    if err != nil {
        outFile.Close()
        return err
    }

    _, err = io.Copy(outFile, rc)
    rc.Close()
    outFile.Close()

    if err != nil {
        return err
    }
}
return nil
登录后复制

}

2. 支持 GZIP 单文件压缩解压

GZIP 通常用于单个文件压缩,常用于网络传输或日志压缩。使用 compress/gzip 包即可实现。

GZIP 压缩单个文件

func CompressGzip(srcFile, destGzip string) error {
    src, err := os.Open(srcFile)
    if err != nil {
        return err
    }
    defer src.Close()
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">dst, err := os.Create(destGzip)
if err != nil {
    return err
}
defer dst.Close()

gz := gzip.NewWriter(dst)
defer gz.Close()

_, err = io.Copy(gz, src)
return err
登录后复制

}

GZIP 解压文件

func DecompressGzip(srcGzip, destFile string) error {
    src, err := os.Open(srcGzip)
    if err != nil {
        return err
    }
    defer src.Close()
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">gz, err := gzip.NewReader(src)
if err != nil {
    return err
}
defer gz.Close()

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

_, err = io.Copy(dst, gz)
return err
登录后复制

}

3. 项目结构建议

为了便于维护和扩展,推荐如下目录结构:

  • /cmd/main.go # 程序入口
  • /pkg/compressor/ # 压缩解压核心逻辑
  • /internal/utils/ # 工具函数(如路径校验)
  • /example/ # 使用示例

main.go 示例调用:

func main() {
    files := []string{"file1.txt", "file2.txt"}
    err := compressor.CompressToZip(files, "output.zip")
    if err != nil {
        log.Fatal(err)
    }
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">err = compressor.DecompressZip("output.zip", "./extracted")
if err != nil {
    log.Fatal(err)
}
登录后复制

}

4. 注意事项与优化建议

实际使用中需注意以下几点:

  • 压缩时保留原文件路径或仅用文件名,根据需求调整 header.Name
  • 大文件操作建议增加进度提示或分块处理
  • 错误处理要细致,特别是文件权限和磁盘空间问题
  • 可扩展支持 tar.gz(tar + gzip)格式,适合 Linux 环境
  • 考虑并发压缩多个小文件以提升性能

基本上就这些。Golang 的标准库已经足够强大,无需引入第三方依赖即可完成大多数压缩任务。合理封装后,可作为通用模块集成进各类服务中。不复杂但容易忽略的是路径处理和资源释放,务必确保 Close 被正确调用。

以上就是Golang文件压缩解压功能实现项目的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号