Este paquete de lenguaje Go admite la lectura y escritura de secuencias comprimidas xz. Incluye también un comando gxz para comprimir y descomprimir datos. El paquete está completamente escrito en Go y no depende de ningún código C.
El paquete está actualmente en desarrollo. Puede haber errores y las API no se consideran estables. En este momento, el paquete no puede competir con la herramienta xz en cuanto a velocidad y tamaño de compresión. Los algoritmos se han desarrollado durante mucho tiempo y están altamente optimizados. Sin embargo, hay una serie de mejoras planeadas y soy muy optimista acerca de la compresión y descompresión paralela. ¡Manténganse al tanto!
El siguiente programa de ejemplo muestra cómo utilizar la 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 )
}
}
Puede encontrar la documentación completa en pkg.go.dev.
El paquete incluye una utilidad de línea de comandos gxz para compresión y descompresión.
Utilice el siguiente comando para la instalación:
$ go get github.com/ulikunitz/xz/cmd/gxz
Para probarlo llame al siguiente comando.
$ gxz bigfile
Después de un tiempo, un archivo mucho más pequeño, bigfile.xz, reemplazará a bigfile. Para descomprimirlo use el siguiente comando.
$ gxz -d bigfile.xz
La política de seguridad está documentada en SECURITY.md.
El software no se ve afectado por el ataque a la cadena de suministro en la implementación xz original, CVE-2024-3094. Esta implementación no comparte ningún archivo con la implementación xz original y no se aceptan parches ni solicitudes de extracción sin una revisión.
Todos los avisos de seguridad para este proyecto se publican en github.com/ulikunitz/xz/security/advisories.