今天就跟大家聊聊有關go語言制作的zip壓縮程序示例分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

可以壓縮文件和目錄。
package main
import (
"archive/zip"
"bytes"
"fmt"
"io/ioutil"
"os"
"path/filepath"
)
func main() {
if err := compress(`gopkg`, `gopkg.zip`); err != nil {
fmt.Println(err)
}
}
// 參數frm可以是文件或目錄,不會給dst添加.zip擴展名
func compress(frm, dst string) error {
buf := bytes.NewBuffer(make([]byte, 0, 10*1024*1024)) // 創建一個讀寫緩沖
myzip := zip.NewWriter(buf) // 用壓縮器包裝該緩沖
// 用Walk方法來將所有目錄下的文件寫入zip
err := filepath.Walk(frm, func(path string, info os.FileInfo, err error) error {
var file []byte
if err != nil {
return filepath.SkipDir
}
header, err := zip.FileInfoHeader(info) // 轉換為zip格式的文件信息
if err != nil {
return filepath.SkipDir
}
header.Name, _ = filepath.Rel(filepath.Dir(frm), path)
if !info.IsDir() {
// 確定采用的壓縮算法(這個是內建注冊的deflate)
header.Method = 8
file, err = ioutil.ReadFile(path) // 獲取文件內容
if err != nil {
return filepath.SkipDir
}
} else {
file = nil
}
// 上面的部分如果出錯都返回filepath.SkipDir
// 下面的部分如果出錯都直接返回該錯誤
// 目的是盡可能的壓縮目錄下的文件,同時保證zip文件格式正確
w, err := myzip.CreateHeader(header) // 創建一條記錄并寫入文件信息
if err != nil {
return err
}
_, err = w.Write(file) // 非目錄文件會寫入數據,目錄不會寫入數據
if err != nil { // 因為目錄的內容可能會修改
return err // 最關鍵的是我不知道咋獲得目錄文件的內容
}
return nil
})
if err != nil {
return err
}
myzip.Close() // 關閉壓縮器,讓壓縮器緩沖中的數據寫入buf
file, err := os.Create(dst) // 建立zip文件
if err != nil {
return err
}
defer file.Close()
_, err = buf.WriteTo(file) // 將buf中的數據寫入文件
if err != nil {
return err
}
return nil
}看完上述內容,你們對go語言制作的zip壓縮程序示例分析有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創新互聯成都網站設計公司行業資訊頻道,感謝大家的支持。
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前文章:go語言制作的zip壓縮程序示例分析-創新互聯
鏈接分享:http://www.yijiale78.com/article28/ceiicp.html
成都網站建設公司_創新互聯,為您提供域名注冊、標簽優化、定制開發、企業網站制作、網站營銷、云服務器
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯