最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang中tar壓縮和解壓文件詳情

 更新時(shí)間:2021年11月05日 09:13:43   作者:快樂編程  
這篇文章主要給大家介紹golang中tar壓縮和解壓文件,文章以查看官方文檔自帶的給大家演習(xí)一下golang的archive/tar壓縮和解壓功能,需要的朋友可以參考一下

查看官方文檔,官方自帶的演示:

// 官方演示
package main
 
import (
    "archive/tar"
    "bytes"
    "fmt"
    "io"
    "log"
    "os"
)
 
func main() {
    // 將若干文件寫入壓縮文檔
    // 這邊源文件是直接寫在代碼里哈,然后也沒有輸出一個(gè)文檔
    // 后面會演示源文件進(jìn)行壓縮,然后輸出一個(gè)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)
    }
 
    // 上面壓縮了之后,壓縮內(nèi)容都存儲在buf這個(gè)變量里
    // 這邊遍歷輸出一下即可
    tr := tar.NewReader(&buf)
    for {
        hdr, err := tr.Next()
        if err == io.EOF {
            break // 文件已經(jīng)遍歷完成了
        }
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("%s的文件內(nèi)容: ", hdr.Name)
        if _, err := io.Copy(os.Stdout, tr); err != nil {
            log.Fatal(err)
        }
        fmt.Println()
    }
 
}


1、壓縮并輸出tar.gz文檔

官方的演示中并未將壓縮的內(nèi)容輸出文檔,實(shí)際使用中經(jīng)常會用到。這邊可用os庫中的文件操作,將壓縮內(nèi)容寫入文檔,參考

代碼如下:

// tar壓縮
// 這邊演示一下從源文件進(jìn)行壓縮,然后輸出一個(gè)tar.gz文檔
// 作者:陳杰斌
// 參考地址:http://www.01happy.com/golang-tar/
package main
 
import (
    "archive/tar"
    "bytes"
    "log"
    "os"
)
 
func main() {
    // 創(chuàng)建一個(gè)緩沖區(qū)用來保存壓縮文件內(nèi)容
    var buf bytes.Buffer
    // 創(chuàng)建一個(gè)壓縮文檔
    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)
    }
 
    // 將壓縮文檔內(nèi)容寫入文件 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庫將文檔內(nèi)容讀入

// tar解壓縮演示
// 這邊演示一下從源文件進(jìn)行解壓,然后輸出文件內(nèi)容
// 作者:陳杰斌
// 參考地址:http://www.01happy.com/golang-tar/
package main
 
import (
    "archive/tar"
    "fmt"
    "io"
    "log"
    "os"
)
 
func main() {
    // 解壓需要使用tar.NewReader方法, 這個(gè)方法接收一個(gè)io.Reader對象
    // 那邊怎么從源文件得到io.Reader對象呢?
    // 這邊通過os.Open打開文件,會得到一個(gè)os.File對象,
    // 因?yàn)樗麑?shí)現(xiàn)了io.Reader的Read方法,所有可以直接傳遞給tar.NewReader
    file, err := os.Open("file.tar.gz")
    if err != nil {
        log.Fatalln(err)
    }
    defer file.Close()
 
    // tar對象讀取文件內(nèi)容, 遍歷輸出文件內(nèi)容
    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èi)容:\n", hdr.Name)
        if _, err := io.Copy(os.Stdout, tr); err != nil {
            log.Fatal(err)
        }
        fmt.Println()
    }
}


執(zhí)行一下:

 > go run decompress.go  


golang中tar解壓:

到此這篇關(guān)于golang中tar壓縮和解壓文件詳情的文章就介紹到這了,更多相關(guān)golang中tar壓縮和解壓文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang詳細(xì)講解常用Http庫及Gin框架的應(yīng)用

    Golang詳細(xì)講解常用Http庫及Gin框架的應(yīng)用

    下面這篇文章主要給大家介紹了關(guān)于Golang常用的Http庫及Gin框架,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Golang學(xué)習(xí)之內(nèi)存逃逸分析

    Golang學(xué)習(xí)之內(nèi)存逃逸分析

    內(nèi)存逃逸分析是go的編譯器在編譯期間,根據(jù)變量的類型和作用域,確定變量是堆上還是棧上。本文將帶大家分析一下Golang中的內(nèi)存逃逸,需要的可以了解一下
    2023-01-01
  • go語言中的map如何解決散列性能下降

    go語言中的map如何解決散列性能下降

    近期對go語言的map進(jìn)行深入了解和探究,其中關(guān)于map解決大量沖突的擴(kuò)容操作設(shè)計(jì)的十分巧妙,所以筆者特地整理了這篇文章來探討一下go語言中map如何解決散列性能下降,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • Golang time.Sleep()用法及示例講解

    Golang time.Sleep()用法及示例講解

    Go語言中的Sleep()函數(shù)用于在至少規(guī)定的持續(xù)時(shí)間d內(nèi)停止最新的go-routine,這篇文章主要介紹了Golang time.Sleep()用法及示例講解,需要的朋友可以參考下
    2023-02-02
  • 使用Go+GoQuery庫實(shí)現(xiàn)頭條新聞采集

    使用Go+GoQuery庫實(shí)現(xiàn)頭條新聞采集

    在本文中,我們將介紹如何使用Go語言和GoQuery庫實(shí)現(xiàn)一個(gè)簡單的爬蟲程序,用于抓取頭條新聞的網(wǎng)頁內(nèi)容,我們還將使用爬蟲代理服務(wù),提高爬蟲程序的性能和安全性,我們將使用多線程技術(shù),提高采集效率,最后,我們將展示爬蟲程序的運(yùn)行結(jié)果和代碼,需要的朋友可以參考下
    2023-10-10
  • Golang Socket Server自定義協(xié)議的簡單實(shí)現(xiàn)方案

    Golang Socket Server自定義協(xié)議的簡單實(shí)現(xiàn)方案

    這篇文章主要介紹了Golang Socket Server自定義協(xié)議的簡單實(shí)現(xiàn)方案,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang時(shí)間處理中容易踩的坑分析解決

    Golang時(shí)間處理中容易踩的坑分析解決

    這篇文章主要為大家介紹了Golang時(shí)間處理中容易踩的坑分析解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Go語言規(guī)范context?類型的key用法示例解析

    Go語言規(guī)范context?類型的key用法示例解析

    這篇文章主要為大家介紹了Go語言規(guī)范context?類型的key用法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • golang根據(jù)URL獲取文件名的示例代碼

    golang根據(jù)URL獲取文件名的示例代碼

    這篇文章主要為大家詳細(xì)介紹了golang根據(jù)URL獲取文件名,文中的示例代碼講解詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • GO制作微信機(jī)器人的流程分析

    GO制作微信機(jī)器人的流程分析

    這篇文章主要介紹了利用go制作微信機(jī)器人,本文主要包括項(xiàng)目基礎(chǔ)配置及詳細(xì)代碼講解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08

最新評論

汤原县| 新干县| 师宗县| 华宁县| 江陵县| 曲麻莱县| 扶风县| 壶关县| 蓝田县| 健康| 绥滨县| 加查县| 阳东县| 霍山县| 健康| 涞水县| 上蔡县| 临沧市| 宣汉县| 屏东市| 崇州市| 宁蒗| 恩平市| 右玉县| 平度市| 南乐县| 镇坪县| 浦东新区| 晋宁县| 乌鲁木齐市| 华容县| 河西区| 佛山市| 扎鲁特旗| 开江县| 永登县| 河曲县| 大宁县| 喀喇沁旗| 江山市| 肥乡县|