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

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

PHPz
PHPzoriginal
2023-03-29 15:15:571342parcourir

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

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

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

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!

Déclaration:
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