تدعم حزمة لغة Go هذه قراءة وكتابة تدفقات xz المضغوطة. ويتضمن أيضًا أمر gxz لضغط البيانات وفك ضغطها. الحزمة مكتوبة بالكامل بلغة Go ولا تعتمد على أي كود C.
الحزمة قيد التطوير حاليًا. قد تكون هناك أخطاء ولا تعتبر واجهات برمجة التطبيقات مستقرة. في الوقت الحالي، لا يمكن للحزمة التنافس مع أداة 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 الأصغر حجمًا محل الملف الكبير. لفك الضغط عليه استخدم الأمر التالي.
$ gxz -d bigfile.xz
تم توثيق سياسة الأمان في SECURITY.md.
لم يتأثر البرنامج بهجوم سلسلة التوريد على تطبيق xz الأصلي، CVE-2024-3094. لا يشارك هذا التطبيق أي ملفات مع تطبيق xz الأصلي ولا يتم قبول أي تصحيحات أو طلبات سحب دون مراجعة.
يتم نشر كافة النصائح الأمنية لهذا المشروع تحت github.com/ulikunitz/xz/security/advisories.