Maison > développement back-end > Golang > Parlons de la façon dont Golang décompresse les fichiers

Parlons de la façon dont Golang décompresse les fichiers

PHPz
Libérer: 2023-03-29 15:38:35
original
1457 Les gens l'ont consulté

Golang est un langage de programmation puissant qui fournit de nombreuses bibliothèques pratiques et bibliothèques de classes pour aider les développeurs à développer des applications efficaces. Parmi elles, lors du traitement de fichiers compressés, Golang fournit de nombreuses bibliothèques utiles pour nous aider à compresser et décompresser facilement les fichiers.

Dans cet article, nous présenterons comment Golang décompresse les fichiers.

  1. Bibliothèque standard - archive/tar et archive/zip

Les packages archive/tar et archive/zip de la bibliothèque standard Golang fournissent des fonctions pour compresser et décompresser les fichiers tar et zip.

Jetons un coup d'œil à un exemple de décompression d'un fichier zip à l'aide du package archive/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)
        }
    }
}
Copier après la connexion

Lorsque nous exécutons ce code, il extraira tout le contenu du fichier example.zip et le copiera individuellement dans le répertoire actuel.

De même, en utilisant le package archive/tar, nous pouvons décompresser le fichier tar comme indiqué ci-dessous :

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)
        }
    }
}
Copier après la connexion

Ce code extraira tout le contenu du fichier example.tar et le copiera respectivement dans le répertoire ou le fichier approprié.

  1. Bibliothèque tierce - gzip

En plus des packages archive/tar et archive/zip de la bibliothèque standard, il existe d'autres packages qui peuvent être utilisés pour décompresser des fichiers. L'une des bibliothèques tierces les plus connues est le package gzip.

Notre exemple de code pour décompresser un fichier gzip à l'aide du package gzip ressemble à ceci :

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)
    }
}
Copier après la connexion

Ce code extraira et décompressera tout le contenu du fichier exemple.gz et l'écrira dans un fichier nommé fichier exemple.

Dans cet article, nous avons appris à décompresser des fichiers à l'aide des packages archive/tar et archive/zip de la bibliothèque standard et du package gzip des bibliothèques tierces. Comprendre comment utiliser ces bibliothèques vous aidera à gérer et à travailler plus facilement avec des fichiers compressés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal