欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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 文件中添加一個文件,返回一個待壓縮的文件內(nèi)容應寫入的 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 文件中添加一個文件,返回一個待壓縮的文件內(nèi)容應寫入的 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壓縮與解壓內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • GoLang實現(xiàn)Viper庫的封裝流程詳解

    GoLang實現(xiàn)Viper庫的封裝流程詳解

    Viper是一個用于Go語言應用程序的配置管理庫,它提供了一種簡單而靈活的方式來處理應用程序的配置,支持多種格式的配置文件,這篇文章主要介紹了GoLang封裝Viper庫的流程,感興趣的同學可以參考下文
    2023-05-05
  • Go?iota關鍵字與枚舉類型實現(xiàn)原理

    Go?iota關鍵字與枚舉類型實現(xiàn)原理

    這篇文章主要介紹了Go?iota關鍵字與枚舉類型實現(xiàn)原理,iota是go語言的常量計數(shù)器,只能在常量的表達式中使用,更多相關內(nèi)容需要的小伙伴可以參考一下
    2022-07-07
  • Go語言學習之context包的用法詳解

    Go語言學習之context包的用法詳解

    日常Go開發(fā)中,Context包是用的最多的一個了,幾乎所有函數(shù)的第一個參數(shù)都是ctx,那么我們?yōu)槭裁匆獋鬟fContext呢,Context又有哪些用法,底層實現(xiàn)是如何呢?相信你也一定會有探索的欲望,那么就跟著本篇文章,一起來學習吧
    2022-10-10
  • Golang中四種gRPC模式舉例詳解

    Golang中四種gRPC模式舉例詳解

    gRPC是一種進程間通信技術,在微服務和云原生領域都有著廣泛的應用,下面這篇文章主要給大家介紹了關于Golang中四種gRPC模式的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-03-03
  • 一文帶你熟悉Go語言中的分支結構

    一文帶你熟悉Go語言中的分支結構

    這篇文章主要和大家分享一下Go語言中的分支結構(if?-?else-if?-?else、switch),文中的示例代碼講解詳細,對我們學習Go語言有一定的幫助,需要的可以參考一下
    2022-11-11
  • Go進行接口組合的解決方案

    Go進行接口組合的解決方案

    在 Go 語言中,接口組合是一種強大的特性,它允許將多個接口組合成一個新的接口,從而提供更靈活和可擴展的代碼設計,本文給大家介紹了Go如何進行接口組合,需要的朋友可以參考下
    2024-06-06
  • GO語言中的常量

    GO語言中的常量

    go語言支持的常量有字符型,字符串型,布爾型和數(shù)字型。本文實例講述了Go語言中常量定義方法。分享給大家供大家參考。
    2015-04-04
  • GO語言開發(fā)環(huán)境搭建過程圖文詳解

    GO語言開發(fā)環(huán)境搭建過程圖文詳解

    這篇文章主要介紹了GO語言開發(fā)環(huán)境搭建過程圖文詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Go語言實現(xiàn)熱更新具體步驟

    Go語言實現(xiàn)熱更新具體步驟

    這篇文章主要為大家介紹了Go語言實現(xiàn)熱更新具體步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • golang?Gorm框架講解

    golang?Gorm框架講解

    gorm是一個使用Go語言編寫的ORM框架,這篇文章主要介紹了golang?Gorm框架,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12

最新評論