Этот языковой пакет 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.