Golang解压RAR文件的库推荐

请问在Golang中有没有推荐用于解压RAR文件的库?目前项目需要处理RAR格式的压缩包,但找了一圈发现Golang标准库不支持RAR解压。希望能找到一个稳定、性能良好的第三方库,最好能支持密码解压和多卷RAR文件处理。如果有实际使用经验的大佬能分享一下使用体验和注意事项就更好了。

2 回复

推荐使用 go-unarr 库,它支持 RAR、ZIP、7z 等格式的解压,纯 Go 实现,跨平台兼容性好。安装命令:

go get github.com/gen2brain/go-unarr

示例代码:

package main

import "github.com/gen2brain/go-unarr"

func main() {
    a, err := unarr.NewArchive("example.rar")
    if err != nil {
        panic(err)
    }
    defer a.Close()

    err = a.Extract("output_dir")
    if err != nil {
        panic(err)
    }
}

备选方案:

  1. mholt/archiver:功能更全面(压缩/解压/打包)
  2. 调用系统命令:通过 exec.Command 调用 unrar(需预装 WinRAR 或 unrar 工具)

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


在Golang中处理RAR文件,推荐使用以下库:

推荐库:github.com/nwaples/rardecode

安装方式:

go get github.com/nwaples/rardecode

基本使用示例:

package main

import (
    "fmt"
    "io"
    "os"
    "path/filepath"

    "github.com/nwaples/rardecode"
)

func extractRAR(rarPath, destDir string) error {
    // 打开RAR文件
    rarFile, err := os.Open(rarPath)
    if err != nil {
        return err
    }
    defer rarFile.Close()

    // 创建RAR阅读器
    rdr, err := rardecode.NewReader(rarFile, "")
    if err != nil {
        return err
    }

    // 遍历并解压文件
    for {
        header, err := rdr.Next()
        if err == io.EOF {
            break
        }
        if err != nil {
            return err
        }

        // 创建目标文件路径
        destPath := filepath.Join(destDir, header.Name)
        
        // 如果是目录则创建
        if header.IsDir {
            os.MkdirAll(destPath, 0755)
            continue
        }

        // 创建文件
        if err := os.MkdirAll(filepath.Dir(destPath), 0755); err != nil {
            return err
        }

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

        // 复制文件内容
        _, err = io.Copy(outFile, rdr)
        outFile.Close()
        if err != nil {
            return err
        }
    }
    return nil
}

func main() {
    err := extractRAR("example.rar", "./extracted")
    if err != nil {
        fmt.Println("解压失败:", err)
    } else {
        fmt.Println("解压成功")
    }
}

特点:

  • 纯Go实现:不依赖外部工具
  • 支持密码:可处理加密的RAR文件
  • 轻量级:代码简洁,依赖少
  • 跨平台:在所有支持Go的平台上运行

注意事项:

  • 主要支持RAR格式的解压,不支持压缩功能
  • 对于最新RAR格式的支持可能有限
  • 处理大文件时注意内存使用

这个库是目前Go生态中处理RAR文件最成熟的选择。

回到顶部