Este pacote de linguagem Go oferece suporte à leitura e gravação de fluxos compactados xz. Inclui também um comando gxz para compactar e descompactar dados. O pacote é totalmente escrito em Go e não depende de nenhum código C.
O pacote está atualmente em desenvolvimento. Pode haver bugs e as APIs não são consideradas estáveis. Neste momento o pacote não pode competir com a ferramenta xz em termos de velocidade e tamanho de compactação. Os algoritmos foram desenvolvidos ao longo do tempo e são altamente otimizados. No entanto, há uma série de melhorias planejadas e estou muito otimista em relação à compressão e descompressão paralela. Fique atento!
O programa de exemplo a seguir mostra como usar a 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 )
}
}
Você pode encontrar a documentação completa em pkg.go.dev.
O pacote inclui um utilitário de linha de comando gxz para compactação e descompactação.
Use o seguinte comando para instalação:
$ go get github.com/ulikunitz/xz/cmd/gxz
Para testá-lo, chame o seguinte comando.
$ gxz bigfile
Depois de algum tempo, um arquivo muito menor, bigfile.xz, substituirá bigfile. Para descompactá-lo use o seguinte comando.
$ gxz -d bigfile.xz
A política de segurança está documentada em SECURITY.md.
O software não é afetado pelo ataque à cadeia de suprimentos na implementação xz original, CVE-2024-3094. Esta implementação não compartilha nenhum arquivo com a implementação xz original e nenhum patch ou pull request é aceito sem uma revisão.
Todos os avisos de segurança para este projeto são publicados em github.com/ulikunitz/xz/security/advisories.