Golang 7z压缩解压库推荐

请问有没有推荐的Golang库可以实现7z格式的压缩和解压功能?最好能支持密码保护和多线程操作,同时希望文档齐全、维护活跃。目前在官方标准库和常见第三方库中没找到直接支持7z的方案,求有实际使用经验的朋友分享建议。

2 回复

推荐几个常用的Go语言7z压缩解压库:

  1. go7z - 纯Go实现的7z库,支持压缩和解压,但功能相对基础
  2. archiver - 功能丰富的压缩库,支持7z、zip、tar等多种格式
  3. mholt/archiver - 知名压缩库,API友好,支持7z格式

建议优先考虑mholt/archiver,因为它:

  • 维护活跃,社区支持好
  • 使用简单,几行代码就能搞定
  • 支持密码加密压缩
  • 跨平台兼容性好

示例代码:

import "github.com/mholt/archiver/v3"

// 压缩
err := archiver.Archive([]string{"file1.txt", "folder"}, "output.7z")

// 解压  
err := archiver.Unarchive("file.7z", "output_dir")

如果只需要基础功能,go7z也是不错的选择。注意7z格式较复杂,某些高级功能可能有限制。

更多关于Golang 7z压缩解压库推荐的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


对于Golang中的7z压缩解压,推荐以下两个主流库:

1. mholt/archiver ⭐ (推荐)

功能全面的压缩库,支持7z、zip、tar、rar等多种格式。

import "github.com/mholt/archiver/v4"

// 压缩文件
func compress7z() error {
    files, err := archiver.FilesFromDisk(nil, map[string]string{
        "./file1.txt": "file1.txt",
        "./file2.txt": "file2.txt",
    })
    if err != nil {
        return err
    }
    
    out, err := os.Create("archive.7z")
    if err != nil {
        return err
    }
    defer out.Close()
    
    format := archiver.CompressedArchive{
        Archival: archiver.SevenZip{},
    }
    return format.Archive(context.Background(), out, files)
}

// 解压文件
func extract7z() error {
    return archiver.Unarchive("archive.7z", "./output")
}

2. bodgit/sevenzip

专门针对7z格式的库,提供更底层的7z操作。

import "github.com/bodgit/sevenzip"

// 读取7z文件
func read7z() error {
    r, err := sevenzip.OpenReader("archive.7z")
    if err != nil {
        return err
    }
    defer r.Close()
    
    for _, file := range r.File {
        if file.FileInfo().IsDir() {
            continue
        }
        
        rc, err := file.Open()
        if err != nil {
            return err
        }
        
        // 处理文件内容
        _, err = io.Copy(os.Stdout, rc)
        rc.Close()
        if err != nil {
            return err
        }
    }
    return nil
}

选择建议:

  • mholt/archiver:适合需要支持多种压缩格式的场景,API友好
  • bodgit/sevenzip:适合专门处理7z格式,需要更精细控制的场景

两个库都支持密码保护的7z文件,安装简单:go get github.com/mholt/archiver/v4

回到顶部