Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mari kita bincangkan tentang cara Golang menyahmampat fail

Mari kita bincangkan tentang cara Golang menyahmampat fail

PHPz
PHPzasal
2023-03-29 15:15:571413semak imbas

Golang ialah bahasa pengaturcaraan berkuasa yang menyediakan banyak perpustakaan praktikal dan perpustakaan kelas untuk memudahkan pembangun membangunkan aplikasi yang cekap. Antaranya, apabila memproses fail mampat, Golang menyediakan banyak perpustakaan berguna untuk membantu kami memampatkan dan menyahmampat fail dengan mudah.

Dalam artikel ini, kami akan memperkenalkan cara Golang menyahmampat fail.

  1. Perpustakaan standard - arkib/tar dan arkib/zip

Pakej arkib/tar dan arkib/zip dalam perpustakaan standard Golang menyediakan pemampatan dan penyahmampatan tar dan zip fungsi fail.

Mari kita lihat contoh cara menyahmampat fail zip menggunakan pakej arkib/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)
        }
    }
}

Apabila kita menjalankan kod ini, ia akan mengekstrak semua kandungan contoh. zip, Dan salinnya masing-masing ke fail yang sepadan dalam direktori semasa.

Begitu juga, menggunakan pakej arkib/tar, kita boleh unzip fail tar seperti berikut:

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)
        }
    }
}

Kod ini akan mengekstrak semua kandungan daripada fail example.tar dan mengekstraknya secara berasingan Salinnya ke direktori atau fail yang sesuai.

  1. Pustaka pihak ketiga - gzip

Selain pakej arkib/tar dan arkib/zip dalam perpustakaan standard, terdapat beberapa pakej lain yang boleh digunakan untuk menyahmampat fail. Salah satu perpustakaan pihak ketiga yang lebih terkenal ialah pakej gzip.

Kod contoh kami untuk menyahmampat fail gzip menggunakan pakej gzip adalah seperti berikut:

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)
    }
}

Kod ini akan mengekstrak dan menyahmampat semua kandungan daripada fail example.gz dan Menulis ke a fail bernama contoh dalam direktori semasa.

Dalam artikel ini, kami mempelajari cara menyahmampat fail menggunakan pakej arkib/tar dan arkib/zip daripada pustaka standard dan pakej gzip daripada pustaka pihak ketiga. Memahami cara menggunakan perpustakaan ini akan membantu anda mengurus dan bekerja dengan fail termampat dengan lebih mudah.

Atas ialah kandungan terperinci Mari kita bincangkan tentang cara Golang menyahmampat fail. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn