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

Golang使用archive/zip包實現(xiàn)ZIP壓縮與解壓

 更新時間:2023年08月16日 08:19:19   作者:路多辛  
Golang?中的?archive/zip?包用于處理?ZIP?格式的壓縮文件,提供了一系列用于創(chuàng)建、讀取和解壓縮?ZIP?格式文件的函數(shù)和類型,使用起來非常方便,下面就跟隨小編一起了解一下具體使用方法吧

實現(xiàn)壓縮功能

1、首先需要創(chuàng)建一個 zip 文件。

zip 文件也是一個文件,首先需要創(chuàng)建一個基礎的 zip 文件,使用 os.Create() 函數(shù)創(chuàng)建即可。

package main
import "os"
func main() {
    //第一步,創(chuàng)建 zip 文件
    zipFile, err := os.Create("archive.zip")
    if err != nil {
        panic(err)
    }
    defer zipFile.Close()
}

2、使用 zip.NewWriter() 函數(shù)創(chuàng)建一個新的 *Writer 對象,用于將待壓縮的文件寫入到 zip 文件。

package main
import (
    "archive/zip"
    "os"
)
func main() {
    //第一步,創(chuàng)建 zip 文件
    zipFile, err := os.Create("archive.zip")
    if err != nil {
        panic(err)
    }
    defer zipFile.Close()
    //第二步,創(chuàng)建一個新的 *Writer 對象
    zipWriter := zip.NewWriter(zipFile)
}

3、向 zip 文件中添加第一個文件

創(chuàng)建完 zip writer 后,向 zip 文件中添加一個文件

package main
import (
    "archive/zip"
    "io"
    "os"
)
func main() {
    //第一步,創(chuàng)建 zip 文件
    zipFile, err := os.Create("archive.zip")
    if err != nil {
        panic(err)
    }
    defer zipFile.Close()
    //第二步,創(chuàng)建一個新的 *Writer 對象
    zipWriter := zip.NewWriter(zipFile)
    //第三步,向 zip 文件中添加第一個文件
    //
    //向 zip 文件中添加一個文件,返回一個待壓縮的文件內容應寫入的 Writer
    w, err := zipWriter.Create("json.go")
    if err != nil {
        panic(err)
    }
    // 打開待壓縮的文件
    f, err := os.Open("bec/json.go")
    if err != nil {
        panic(err)
    }
    defer f.Close()
    //需要壓縮更多文件到壓縮包的話,只需要重復第三步即可,只需要更換下文件名
    if _, err := io.Copy(w, f); err != nil {
        panic(err)
    }
}

4、關閉 zip writer,將所有數(shù)據(jù)寫入指向基礎 zip 文件的數(shù)據(jù)流

package main
import (
    "archive/zip"
    "io"
    "os"
)
func main() {
    //第一步,創(chuàng)建 zip 文件
    zipFile, err := os.Create("archive.zip")
    if err != nil {
        panic(err)
    }
    defer zipFile.Close()
    //第二步,創(chuàng)建一個新的 *Writer 對象
    zipWriter := zip.NewWriter(zipFile)
    //第三步,向 zip 文件中添加第一個文件
    //
    //向 zip 文件中添加一個文件,返回一個待壓縮的文件內容應寫入的 Writer
    w, err := zipWriter.Create("json.go")
    if err != nil {
        panic(err)
    }
    // 打開待壓縮的文件
    f, err := os.Open("bec/json.go")
    if err != nil {
        panic(err)
    }
    defer f.Close()
    //需要壓縮更多文件到壓縮包的話,只需要重復第三步即可,只需要更換下文件名
    if _, err := io.Copy(w, f); err != nil {
        panic(err)
    }
    // 第四步,關閉 zip writer,將所有數(shù)據(jù)寫入指向基礎 zip 文件的數(shù)據(jù)流
    zipWriter.Close()
}

解壓 ZIP 包

1、 使用 zip.OpenReader 打開 zip 包

package main
import (
    "archive/zip"
)
func main() {
    // 第一步,打開 zip 文件
    zipFile, err := zip.OpenReader("archive.zip")
    if err != nil {
        panic(err)
    }
    defer zipFile.Close()
}

2、 遍歷 zip 中的文件,將壓縮包的中的文件讀取到本地文件

package main
import (
	"archive/zip"
	"io"
	"os"
	"path/filepath"
)
func main() {
	// 第一步,打開 zip 文件
	zipFile, err := zip.OpenReader("archive.zip")
	if err != nil {
		panic(err)
	}
	defer zipFile.Close()
	// 第二步,遍歷 zip 中的文件
	for _, f := range zipFile.File {
		filePath := f.Name
		if f.FileInfo().IsDir() {
			_ = os.MkdirAll(filePath, os.ModePerm)
			continue
		}
    // 創(chuàng)建對應文件夾
		if err := os.MkdirAll(filepath.Dir(filePath), os.ModePerm); err != nil {
			panic(err)
		}
    // 解壓到的目標文件
		dstFile, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
		if err != nil {
			panic(err)
		}
		file, err := f.Open()
		if err != nil {
			panic(err)
		}
    // 寫入到解壓到的目標文件
		if _, err := io.Copy(dstFile, file); err != nil {
			panic(err)
		}
		dstFile.Close()
		file.Close()
	}
}

到此這篇關于Golang使用archive/zip包實現(xiàn)ZIP壓縮與解壓的文章就介紹到這了,更多相關Go ZIP壓縮與解壓內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • go開發(fā)alertmanger實現(xiàn)釘釘報警

    go開發(fā)alertmanger實現(xiàn)釘釘報警

    本文主要介紹了go開發(fā)alertmanger實現(xiàn)釘釘報警,通過自己的url實現(xiàn)alertmanager的釘釘報警,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Go語言實現(xiàn)請求超時處理的方法總結

    Go語言實現(xiàn)請求超時處理的方法總結

    這篇文章主要為大家詳細介紹了Go語言中實現(xiàn)請求的超時控制的方法,主要是通過timer和timerCtx來實現(xiàn)請求的超時控制,希望對大家有所幫助
    2023-05-05
  • GoLand如何設置中文

    GoLand如何設置中文

    這篇文章主要介紹了GoLand如何設置中文,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Go語言并發(fā)范式之future模式詳解

    Go語言并發(fā)范式之future模式詳解

    編程中經(jīng)常遇到在一個流程中需要調用多個子調用的情況,此時就可以使用Go并發(fā)編程中的future模式,下面小編就來和大家聊聊future模式的具體使用,需要的可以參考一下
    2023-06-06
  • Golang實現(xiàn)內網(wǎng)穿透詳解

    Golang實現(xiàn)內網(wǎng)穿透詳解

    這篇文章主要為大家詳細介紹了Golang實現(xiàn)內網(wǎng)穿透的相關知識,包括原理和代碼實現(xiàn),文中的示例代碼講解詳細,有需要的小伙伴可以參考一下
    2024-11-11
  • Golang實現(xiàn)AES對稱加密算法實例詳解

    Golang實現(xiàn)AES對稱加密算法實例詳解

    所謂對稱加密是指在加密和解碼時使用同一密鑰的加密方式,下面這篇文章主要給大家介紹了關于Golang實現(xiàn)AES對稱加密算法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • gorm FirstOrCreate和受影響的行數(shù)實例

    gorm FirstOrCreate和受影響的行數(shù)實例

    這篇文章主要介紹了gorm FirstOrCreate和受影響的行數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go中Goroutines輕量級并發(fā)的特性及效率探究

    Go中Goroutines輕量級并發(fā)的特性及效率探究

    這篇文章主要為大家介紹了Go中Goroutines輕量級并發(fā)的特性及效率探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • VS?Code安裝go插件失敗原因分析以及解決方案

    VS?Code安裝go插件失敗原因分析以及解決方案

    vscode安裝go插件時,由于各種原因,在安裝插件時總是失敗,下面這篇文章主要給大家介紹了關于VS?Code安裝go插件失敗原因分析以及解決的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • go程序測試CPU占用率統(tǒng)計ps?vs?top兩種不同方式對比

    go程序測試CPU占用率統(tǒng)計ps?vs?top兩種不同方式對比

    這篇文章主要為大家介紹了go程序測試CPU占用率統(tǒng)計ps?vs?top兩種不同方式對比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05

最新評論

时尚| 疏勒县| 光山县| 溆浦县| 文登市| 吉林省| 吉木乃县| 滨州市| 嘉善县| 沽源县| 桃江县| 台南县| 中西区| 高安市| 洪雅县| 北海市| 沈阳市| 汾阳市| 阜阳市| 深州市| 阜南县| 福鼎市| 阜平县| 东兴市| 临桂县| 广东省| 桃源县| 静宁县| 新和县| 东乌珠穆沁旗| 安吉县| 峨眉山市| 临高县| 安平县| 湛江市| 留坝县| 宁河县| 铜山县| 普兰店市| 南陵县| 玛沁县|