Ce package de langage Go prend en charge la lecture et l’écriture de flux compressés xz. Il comprend également une commande gxz pour compresser et décompresser les données. Le package est entièrement écrit en Go et ne dépend d’aucun code C.
Le package est actuellement en cours de développement. Il peut y avoir des bugs et les API ne sont pas considérées comme stables. Pour le moment, le package ne peut pas rivaliser avec l’outil xz en termes de vitesse et de taille de compression. Les algorithmes y ont été développés depuis longtemps et sont hautement optimisés. Cependant, un certain nombre d'améliorations sont prévues et je suis très optimiste quant à la compression et à la décompression parallèles. Restez à l'écoute!
L'exemple de programme suivant montre comment utiliser l'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 )
}
}
Vous pouvez trouver la documentation complète sur pkg.go.dev.
Le package comprend un utilitaire de ligne de commande gxz pour la compression et la décompression.
Utilisez la commande suivante pour l'installation :
$ go get github.com/ulikunitz/xz/cmd/gxz
Pour le tester, appelez la commande suivante.
$ gxz bigfile
Après un certain temps, un fichier beaucoup plus petit, bigfile.xz, remplacera bigfile. Pour le décompresser, utilisez la commande suivante.
$ gxz -d bigfile.xz
La politique de sécurité est documentée dans SECURITY.md.
Le logiciel n'est pas affecté par l'attaque de la chaîne d'approvisionnement sur l'implémentation xz d'origine, CVE-2024-3094. Cette implémentation ne partage aucun fichier avec l'implémentation xz d'origine et aucun correctif ou demande d'extraction n'est accepté sans examen.
Tous les avis de sécurité pour ce projet sont publiés sous github.com/ulikunitz/xz/security/advisories.