이 Go 언어 패키지는 xz 압축 스트림의 읽기 및 쓰기를 지원합니다. 여기에는 데이터 압축 및 압축 해제를 위한 gxz 명령도 포함되어 있습니다. 패키지는 완전히 Go로 작성되었으며 C 코드에 대한 종속성이 없습니다.
패키지는 현재 개발 중입니다. 버그가 있을 수 있으며 API는 안정적인 것으로 간주되지 않습니다. 현재 패키지는 압축 속도 및 크기 측면에서 xz 도구와 경쟁할 수 없습니다. 알고리즘은 오랜 시간에 걸쳐 개발되었으며 고도로 최적화되었습니다. 그러나 많은 개선이 계획되어 있으며 병렬 압축 및 압축 해제에 대해 매우 낙관적입니다. 계속 지켜봐 주시기 바랍니다!
다음 예제 프로그램은 API 사용 방법을 보여줍니다.
package main
import (
"bytes"
"io"
"log"
"os"
"github.com/ulikunitz/xz"
)
func main () {
const text = "The quick brown fox jumps over the lazy dog. n "
var buf bytes. Buffer
// compress text
w , err := xz . NewWriter ( & buf )
if err != nil {
log . Fatalf ( "xz.NewWriter error %s" , err )
}
if _ , err := io . WriteString ( w , text ); err != nil {
log . Fatalf ( "WriteString error %s" , err )
}
if err := w . Close (); err != nil {
log . Fatalf ( "w.Close error %s" , err )
}
// decompress buffer and write output to stdout
r , err := xz . NewReader ( & buf )
if err != nil {
log . Fatalf ( "NewReader error %s" , err )
}
if _ , err = io . Copy ( os . Stdout , r ); err != nil {
log . Fatalf ( "io.Copy error %s" , err )
}
}
pkg.go.dev에서 전체 문서를 찾을 수 있습니다.
패키지에는 압축 및 압축 해제를 위한 gxz 명령줄 유틸리티가 포함되어 있습니다.
설치하려면 다음 명령을 사용하십시오.
$ go get github.com/ulikunitz/xz/cmd/gxz
테스트하려면 다음 명령을 호출하십시오.
$ gxz bigfile
얼마 후 훨씬 더 작은 파일인 bigfile.xz가 bigfile을 대체하게 됩니다. 압축을 풀려면 다음 명령을 사용하십시오.
$ gxz -d bigfile.xz
보안 정책은 SECURITY.md에 문서화되어 있습니다.
이 소프트웨어는 원래 xz 구현에 대한 공급망 공격(CVE-2024-3094)의 영향을 받지 않습니다. 이 구현은 원래 xz 구현과 파일을 공유하지 않으며 검토 없이는 패치나 풀 요청이 허용되지 않습니다.
이 프로젝트에 대한 모든 보안 권고는 github.com/ulikunitz/xz/security/advisories에 게시되어 있습니다.