Go語(yǔ)言中使用compress/gzip包實(shí)現(xiàn)文件及內(nèi)存數(shù)據(jù)的壓縮解壓。1. 壓縮文件:打開(kāi)源文件,創(chuàng)建.gz目標(biāo)文件,通過(guò)gzip.NewWriter寫(xiě)入并調(diào)用Close()完成壓縮。2. 解壓文件:用gzip.NewReader讀取.gz文件,io.Copy將解壓數(shù)據(jù)寫(xiě)入新文件。3. 內(nèi)存操作:bytes.Buffer結(jié)合gzip.Writer/Reader實(shí)現(xiàn)字節(jié)流壓縮解壓,適用于API響應(yīng)等場(chǎng)景。關(guān)鍵點(diǎn):Writer必須Close以觸發(fā)壓縮,Reader可直接流式讀取,建議封裝為通用函數(shù)復(fù)用。
在Go語(yǔ)言中處理gzip壓縮與解壓非常方便,標(biāo)準(zhǔn)庫(kù)compress/gzip
結(jié)合os
、io
等包即可實(shí)現(xiàn)文件的壓縮與解壓。下面介紹常見(jiàn)使用場(chǎng)景和代碼實(shí)踐。
將普通文件壓縮為gzip格式,通常用于日志歸檔或網(wǎng)絡(luò)傳輸前的數(shù)據(jù)壓縮。
關(guān)鍵步驟:
gzip.NewWriter
包裝輸出文件Close()
觸發(fā)壓縮完成func compressFile(src, dst string) error { srcFile, err := os.Open(src) if err != nil { return err } defer srcFile.Close() dstFile, err := os.Create(dst) if err != nil { return err } defer dstFile.Close() gzWriter := gzip.NewWriter(dstFile) defer gzWriter.Close() _, err = io.Copy(gzWriter, srcFile) return err }
從gzip文件還原原始內(nèi)容,常用于下載后解壓或讀取壓縮日志。
立即學(xué)習(xí)“go語(yǔ)言免費(fèi)學(xué)習(xí)筆記(深入)”;
注意點(diǎn):
gzip.NewReader
解析.gz文件func decompressFile(src, dst string) error { srcFile, err := os.Open(src) if err != nil { return err } defer srcFile.Close() gzReader, err := gzip.NewReader(srcFile) if err != nil { return err } defer gzReader.Close() dstFile, err := os.Create(dst) if err != nil { return err } defer dstFile.Close() _, err = io.Copy(dstFile, gzReader) return err }
適用于不需要落地文件的場(chǎng)景,比如API響應(yīng)壓縮或配置加載。
使用bytes.Buffer
作為緩沖區(qū):
// 壓縮字節(jié)流 func gzipData(data []byte) ([]byte, error) { var buf bytes.Buffer writer := gzip.NewWriter(&buf) _, err := writer.Write(data) if err != nil { return nil, err } writer.Close() // 必須調(diào)用 return buf.Bytes(), nil } // 解壓字節(jié)流 func gunzipData(data []byte) ([]byte, error) { reader, err := gzip.NewReader(bytes.NewReader(data)) if err != nil { return nil, err } defer reader.Close() return io.ReadAll(reader) }
基本上就這些。核心是理解gzip.Writer需要顯式關(guān)閉才能完成壓縮流程,而gzip.Reader可直接用于流式讀取。實(shí)際項(xiàng)目中可封裝成通用函數(shù)復(fù)用。
以上就是Golang compress/gzip文件壓縮與解壓實(shí)踐的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)