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

go 壓縮解壓zip文件源碼示例

 更新時間:2022年07月14日 11:46:34   作者:ChenXcc  
這篇文章主要為大家介紹了go壓縮及解壓zip文件的源碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

壓縮zip

func Zip(dest string, paths ...string) error {
    zfile, err := os.Create(dest)
    if err != nil {
        return err
    }
    defer zfile.Close()
    zipWriter := zip.NewWriter(zfile)
    defer zipWriter.Close()
    for _, src := range paths {
        // remove the trailing path sepeartor if it is a directory
        src := strings.TrimSuffix(src, string(os.PathSeparator))
        err = filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
            if err != nil {
                return err
            }
            // create local file header
            header, err := zip.FileInfoHeader(info)
            if err != nil {
                return err
            }
            // set compression method to deflate
            header.Method = zip.Deflate
            // set relative path of file in zip archive
            header.Name, err = filepath.Rel(filepath.Dir(src), path)
            if err != nil {
                return err
            }
            if info.IsDir() {
                header.Name += string(os.PathSeparator)
            }
            // create writer for writing header
            headerWriter, err := zipWriter.CreateHeader(header)
            if err != nil {
                return err
            }
            if info.IsDir() {
                return nil
            }
            f, err := os.Open(path)
            if err != nil {
                return err
            }
            defer f.Close()
            _, err = io.Copy(headerWriter, f)
            return err
        })
        if err != nil {
            return err
        }
    }
    return nil
}

解壓zip

func Unzip(src string, dest string) error {
    reader, err := zip.OpenReader(src)
    if err != nil {
        return err
    }
    defer reader.Close()
    for _, file := range reader.File {
        filePath := path.Join(dest, file.Name)
        if file.FileInfo().IsDir() {
            os.MkdirAll(filePath, os.ModePerm)
        } else {
            if err = os.MkdirAll(filepath.Dir(filePath), os.ModePerm); err != nil {
                return err
            }
            inFile, err := file.Open()
            if err != nil {
                return err
            }
            defer inFile.Close()
            outFile, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
            if err != nil {
                return err
            }
            defer outFile.Close()
            _, err = io.Copy(outFile, inFile)
            if err != nil {
                return err
            }
        }
    }
    return nil
}

工程源碼

https://github.com/xbmlz/gct

以上就是go 壓縮解壓zip文件源碼示例的詳細內容,更多關于go壓縮解壓zip文件的資料請關注腳本之家其它相關文章!

相關文章

  • golang類型斷言的實現示例

    golang類型斷言的實現示例

    在Go語言中,類型斷言用于從接口類型獲取其具體類型的值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-10-10
  • 一文詳解Go語言中的Defer機制

    一文詳解Go語言中的Defer機制

    在Go語言中,defer是一個關鍵字,用于確保資源的清理和釋放,特別是在函數中創(chuàng)建的資源,下面就跟隨小編一起來了解下Defer機制的具體使用吧
    2024-11-11
  • Go語言基礎函數包的使用學習

    Go語言基礎函數包的使用學習

    本文通過一個實現加減乘除運算的小程序來介紹go函數的使用,以及使用函數的注意事項,并引出了對包的了解和使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • go中for?range的坑以及解決方案

    go中for?range的坑以及解決方案

    相信小伙伴都遇到過以下的循環(huán)變量的問題,本文主要介紹了go中for?range的坑以及解決方案,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Golang 在gin框架中如何使用JWT鑒權

    Golang 在gin框架中如何使用JWT鑒權

    JWT,全稱 JSON Web Token,是一種開放標準(RFC 7519),用于安全地在雙方之間傳遞信息,這篇文章主要介紹了golang 在Gin框架中使用JWT鑒權,需要的朋友可以參考下
    2024-07-07
  • 詳解Go語言如何判斷兩個對象是否相等

    詳解Go語言如何判斷兩個對象是否相等

    在編程中,判斷兩個對象是否相等是一項常見的任務,同時判斷對象是否相等在很多情況下都非常重要,所以在接下來的內容中,我們將詳細介紹在?Go?語言中如何判斷對象是否相等的方法和技巧,需要的可以參考一下
    2023-06-06
  • golang的協程上下文的具體使用

    golang的協程上下文的具體使用

    golang的context?主要用來在?goroutine?之間傳遞上下文信息,包括:取消信號、超時時間、截止時間、k-v?等,本文就詳細的來介紹一下golang的協程上下文的具體使用,感興趣的可以了解一下
    2022-04-04
  • GO 語言學習指南

    GO 語言學習指南

    這篇文章主要介紹了GO 語言學習指南,介紹的相當全面,有需要的小伙伴參考下吧。
    2015-01-01
  • 一文搞懂Go語言中文件的讀寫與創(chuàng)建

    一文搞懂Go語言中文件的讀寫與創(chuàng)建

    這篇文章主要為大家詳細介紹了Go語言中文件是如何實現讀寫與創(chuàng)建的,文中的示例代碼講解詳細,對我們學習Go語言有一定幫助,需要的可以參考一下
    2022-07-07
  • Go?runtime?調度器之系統(tǒng)調用引起的搶占

    Go?runtime?調度器之系統(tǒng)調用引起的搶占

    本文解析了在Go語言中,當goroutine執(zhí)行的系統(tǒng)調用時間過長時,系統(tǒng)如何通過監(jiān)控和搶占機制來處理,以維持運行效率和資源分配的平衡,通過具體的示例和流程圖,詳細展示了系統(tǒng)調用過程中的搶占操作,感興趣的朋友跟隨小編一起看看吧
    2024-09-09

最新評論