在 go 中读取 xz 文件
Posted
技术标签:
【中文标题】在 go 中读取 xz 文件【英文标题】:Read xz files in go 【发布时间】:2013-10-24 01:36:15 【问题描述】:如何在 go 程序中读取 xz 文件?当我尝试使用lzma
阅读它们时,我收到error in lzma header
错误。
【问题讨论】:
我猜这个库只支持 LZMA 而不是xz
档案使用的 LZMA2。
【参考方案1】:
您有 3 个选项。
-
尝试另一个库,也许是使用 cgo 的库。我看到两个here。
直接使用 cgo/制作自己的 lib。
使用 xz 可执行文件。
选项三比听起来容易。这是我会使用的:
func xzReader(r io.Reader) io.ReadCloser
rpipe, wpipe := io.Pipe()
cmd := exec.Command("xz", "--decompress", "--stdout")
cmd.Stdin = r
cmd.Stdout = wpipe
go func()
err := cmd.Run()
wpipe.CloseWithError(err)
()
return rpipe
此处可运行代码:http://play.golang.org/p/SrgZiKdv9a
【讨论】:
谢谢,我不知何故错过了 godoc.org 和这个非常简单的管道。 您的选项 3 解决方案通常适用于将各种 shell 命令合并到 Go 程序中。【参考方案2】:我最近创建了一个 XZ 解压包。它不需要 Cgo。你可以在这里找到它:
https://github.com/xi2/xz
一个将标准输入解压到标准输出的程序:
package main
import (
"io"
"log"
"os"
"github.com/xi2/xz"
)
func main()
r, err := xz.NewReader(os.Stdin, 0)
if err != nil
log.Fatal(err)
_, err = io.Copy(os.Stdout, r)
if err != nil
log.Fatal(err)
【讨论】:
以上是关于在 go 中读取 xz 文件的主要内容,如果未能解决你的问题,请参考以下文章