golang中tar壓縮和解壓文件詳情
更新時間:2021年11月05日 09:13:43 作者:快樂編程
這篇文章主要給大家介紹golang中tar壓縮和解壓文件,文章以查看官方文檔自帶的給大家演習一下golang的archive/tar壓縮和解壓功能,需要的朋友可以參考一下
查看官方文檔,官方自帶的演示:
// 官方演示 package main import ( "archive/tar" "bytes" "fmt" "io" "log" "os" ) func main() { // 將若干文件寫入壓縮文檔 // 這邊源文件是直接寫在代碼里哈,然后也沒有輸出一個文檔 // 后面會演示源文件進行壓縮,然后輸出一個tar.gz的壓縮文檔 var buf bytes.Buffer tw := tar.NewWriter(&buf) var files = []struct { Name, Body string }{ {"readme.txt", "This archive contains some text files."}, {"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"}, {"todo.txt", "Get animal handling license."}, } for _, file := range files { hdr := &tar.Header{ Name: file.Name, Mode: 0600, Size: int64(len(file.Body)), } if err := tw.WriteHeader(hdr); err != nil { log.Fatal(err) } if _, err := tw.Write([]byte(file.Body)); err != nil { log.Fatal(err) } } if err := tw.Close(); err != nil { log.Fatal(err) } // 上面壓縮了之后,壓縮內容都存儲在buf這個變量里 // 這邊遍歷輸出一下即可 tr := tar.NewReader(&buf) for { hdr, err := tr.Next() if err == io.EOF { break // 文件已經遍歷完成了 } if err != nil { log.Fatal(err) } fmt.Printf("%s的文件內容: ", hdr.Name) if _, err := io.Copy(os.Stdout, tr); err != nil { log.Fatal(err) } fmt.Println() } }
1、壓縮并輸出tar.gz文檔
官方的演示中并未將壓縮的內容輸出文檔,實際使用中經常會用到。這邊可用os庫中的文件操作,將壓縮內容寫入文檔,參考
代碼如下:
// tar壓縮 // 這邊演示一下從源文件進行壓縮,然后輸出一個tar.gz文檔 // 作者:陳杰斌 // 參考地址:http://www.01happy.com/golang-tar/ package main import ( "archive/tar" "bytes" "log" "os" ) func main() { // 創(chuàng)建一個緩沖區(qū)用來保存壓縮文件內容 var buf bytes.Buffer // 創(chuàng)建一個壓縮文檔 tw := tar.NewWriter(&buf) // 定義一堆文件 // 將文件寫入到壓縮文檔tw var files = []struct { Name, Body string }{ {"readme.txt", "This archive contains some text files."}, {"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"}, {"todo.txt", "Get animal handling license."}, } for _, file := range files { hdr := &tar.Header{ Name: file.Name, Mode: 0600, Size: int64(len(file.Body)), } if err := tw.WriteHeader(hdr); err != nil { log.Fatal(err) } if _, err := tw.Write([]byte(file.Body)); err != nil { log.Fatal(err) } } if err := tw.Close(); err != nil { log.Fatal(err) } // 將壓縮文檔內容寫入文件 file.tar.gz f, err := os.OpenFile("file.tar.gz", os.O_CREATE|os.O_WRONLY, 0666) if err != nil { log.Fatal(err) } buf.WriteTo(f) }
執(zhí)行一下哈:
> go run compress.go
golang中tar壓縮:
2、tar解壓縮
同上,可以使用os
庫將文檔內容讀入
// tar解壓縮演示 // 這邊演示一下從源文件進行解壓,然后輸出文件內容 // 作者:陳杰斌 // 參考地址:http://www.01happy.com/golang-tar/ package main import ( "archive/tar" "fmt" "io" "log" "os" ) func main() { // 解壓需要使用tar.NewReader方法, 這個方法接收一個io.Reader對象 // 那邊怎么從源文件得到io.Reader對象呢? // 這邊通過os.Open打開文件,會得到一個os.File對象, // 因為他實現(xiàn)了io.Reader的Read方法,所有可以直接傳遞給tar.NewReader file, err := os.Open("file.tar.gz") if err != nil { log.Fatalln(err) } defer file.Close() // tar對象讀取文件內容, 遍歷輸出文件內容 tr := tar.NewReader(file) for { hdr, err := tr.Next() if err == io.EOF { break // End of archive } if err != nil { log.Fatal(err) } fmt.Printf("%s文件內容:\n", hdr.Name) if _, err := io.Copy(os.Stdout, tr); err != nil { log.Fatal(err) } fmt.Println() } }
執(zhí)行一下:
> go run decompress.go
golang中tar解壓:
到此這篇關于golang中tar壓縮和解壓文件詳情的文章就介紹到這了,更多相關golang中tar壓縮和解壓文件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
VsCode搭建Go語言開發(fā)環(huán)境的配置教程
這篇文章主要介紹了在VsCode中搭建Go開發(fā)環(huán)境的配置教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05深入了解Go的interface{}底層原理實現(xiàn)
本文主要介紹了Go的interface{}底層原理實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-06-06golang channel讀取數(shù)據(jù)的幾種情況
本文主要介紹了golang channel讀取數(shù)據(jù)的幾種情況,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02