ホームページ > バックエンド開発 > Golang > Golang がファイルを解凍する方法について話しましょう

Golang がファイルを解凍する方法について話しましょう

PHPz
リリース: 2023-03-29 15:38:35
オリジナル
1457 人が閲覧しました

Golang は、開発者が効率的なアプリケーションを開発できるよう、多くの実用的なライブラリとクラス ライブラリを提供する強力なプログラミング言語です。その中でも、圧縮ファイルを処理する場合、Golang はファイルの圧縮と解凍を簡単に行うのに役立つ多くの便利なライブラリを提供します。

この記事では、Golang がファイルを解凍する方法を紹介します。

  1. 標準ライブラリ - archive/tar および archive/zip

Golang 標準ライブラリの archive/tar および archive/zip パッケージは、tar および zip の圧縮と解凍を提供します。ファイルの機能。

archive/zip パッケージを使用して zip ファイルを解凍する方法の例を見てみましょう:

package main

import (
    "archive/zip"
    "fmt"
    "io"
  "os"
)

func main() {
    zipReader, err := zip.OpenReader("example.zip")
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    defer zipReader.Close()

    for _, file := range zipReader.File {
        fmt.Println("Extracting ", file.Name)
        dest, err := os.Create(file.Name)
        if err != nil {
            fmt.Println(err)
            os.Exit(1)
        }
        defer dest.Close()

        src, err := file.Open()
        if err != nil {
            fmt.Println(err)
            os.Exit(1)
        }
        defer src.Close()

        _, err = io.Copy(dest, src)
        if err != nil {
            fmt.Println(err)
            os.Exit(1)
        }
    }
}
ログイン後にコピー

このコードを実行すると、サンプルの内容がすべて抽出されます。 .zip ファイルを作成して個別に保存します。現在のディレクトリ内の対応するファイルにコピーします。

同様に、archive/tar パッケージを使用すると、次のように tar ファイルを解凍できます。

package main

import (
    "fmt"
    "io"
    "os"
    "archive/tar"
)

func main() {
    tarFile, err := os.Open("example.tar")
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    defer tarFile.Close()

    tarReader := tar.NewReader(tarFile)

    for true {
        header, err := tarReader.Next()
        if err == io.EOF {
            break
        }
        if err != nil {
            fmt.Println(err)
            os.Exit(1)
        }

        fmt.Println("Extracting ", header.Name)

        switch header.Typeflag {
        case tar.TypeDir:
            err = os.Mkdir(header.Name, 0755)

            if err != nil {
                fmt.Println(err)
                os.Exit(1)
            }
        case tar.TypeReg:
            dest, err := os.Create(header.Name)

            if err != nil {
                fmt.Println(err)
                os.Exit(1)
            }

            defer dest.Close()

            _, err = io.Copy(dest, tarReader)

            if err != nil {
                fmt.Println(err)
                os.Exit(1)
            }
        default:
            fmt.Printf("Unable to extract %s\n", header.Name)
        }
    }
}
ログイン後にコピー

このコードは、example.tar ファイルからすべての内容を抽出し、それらを分離します。適切なディレクトリまたはファイル。

  1. サードパーティ ライブラリ - gzip

標準ライブラリの archive/tar および archive/zip パッケージに加えて、使用できる他のパッケージがいくつかあります。ファイルを解凍します。よりよく知られているサードパーティ ライブラリの 1 つは gzip パッケージです。

gzip パッケージを使用して gzip ファイルを解凍するサンプル コードは次のとおりです。

package main

import (
    "fmt"
    "io"
    "os"
    "compress/gzip"
)

func main() {
    inFile, err := os.Open("example.gz")
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    defer inFile.Close()

    gzReader, err := gzip.NewReader(inFile)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    defer gzReader.Close()

    dest, err := os.Create("example")
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    defer dest.Close()

    _, err = io.Copy(dest, gzReader)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
}
ログイン後にコピー

このコードは、example.gz ファイルからすべての内容を抽出および解凍し、ファイルに書き込みます。現在のディレクトリにある名前付きの example。

この記事では、標準ライブラリの archive/tar および archive/zip パッケージと、サードパーティ ライブラリの gzip パッケージを使用してファイルを解凍する方法を学びました。これらのライブラリの使用方法を理解すると、圧縮ファイルの管理と操作がより簡単になります。

以上がGolang がファイルを解凍する方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート