亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 深入理解Golang?Channel?的底層結構

    深入理解Golang?Channel?的底層結構

    這篇文章主要介紹了深入理解Golang?Channel?的底層結構,Go?語言的?channel?底層是什么數(shù)據(jù)結構?下面我們就一起來深入解析一下?channel,需要的朋友可以參考下
    2022-01-01
  • Go 語言單例模式示例詳解

    Go 語言單例模式示例詳解

    這篇文章主要為大家介紹了Go 語言單例模式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 簡化Go開發(fā)提高生產力的強大工具及使用詳解

    簡化Go開發(fā)提高生產力的強大工具及使用詳解

    作為?Go?開發(fā)人員,應該都知道維持簡潔高效開發(fā)工作流程的重要性,為了提高工作效率和代碼質量,簡化開發(fā)流程并自動執(zhí)行重復性任務至關重要,在本文中,我們將探討一些強大的工具和技術,它們將簡化?Go?開發(fā)過程,助力您的編碼之旅
    2023-10-10
  • Go官方工具鏈用法詳解

    Go官方工具鏈用法詳解

    Go官方工具鏈工具要求所有的Go源代碼文件必須以.go后綴結尾。這里,我們假設一個最簡單的Go程序放在hello.go的文件中,下面通過示例代碼給大家介紹Go官方工具鏈用法簡介,需要的朋友可以參考下
    2021-10-10
  • VsCode搭建Go語言開發(fā)環(huán)境的配置教程

    VsCode搭建Go語言開發(fā)環(huán)境的配置教程

    這篇文章主要介紹了在VsCode中搭建Go開發(fā)環(huán)境的配置教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • jenkins構建go及java項目的方法

    jenkins構建go及java項目的方法

    這篇文章主要介紹了jenkins構建go及java項目,本文通過圖文實例相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值了,需要的朋友可以參考下
    2021-04-04
  • 深入了解Go的interface{}底層原理實現(xiàn)

    深入了解Go的interface{}底層原理實現(xiàn)

    本文主要介紹了Go的interface{}底層原理實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • golang channel讀取數(shù)據(jù)的幾種情況

    golang channel讀取數(shù)據(jù)的幾種情況

    本文主要介紹了golang channel讀取數(shù)據(jù)的幾種情況,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Go語言map不支持并發(fā)寫操作的原因

    Go語言map不支持并發(fā)寫操作的原因

    Go語言為什么不支持并發(fā)讀寫map?,Go官方的說法是在多數(shù)情況下map只存在并發(fā)讀操作,如果原生支持并發(fā)讀寫,即降低了并發(fā)讀操作的性能,在使用?map?時,要特別注意是否存在對?map?的并發(fā)寫操作,如果存在,要結合?sync?包的互斥鎖一起使用,
    2024-01-01
  • Go?錯誤處理實踐總結示例

    Go?錯誤處理實踐總結示例

    這篇文章主要為大家介紹了Go錯誤處理實踐的總結示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07

最新評論