Décompresser les fichiers tar.gz dans Go
La décompression des fichiers tar.gz dans Go implique l'utilisation des packages archive/tar et compress/gzip. Bien qu'un exemple de code ait été fourni, il a rencontré des problèmes liés aux limites d'ouverture des fichiers.
Pour résoudre ce problème, nous proposons ci-dessous une solution mise à jour, qui modifie la façon dont le fichier de sortie est fermé.
<code class="go">import ( "archive/tar" "compress/gzip" "fmt" "io" "log" "os" ) func ExtractTarGz(gzipStream io.Reader) { uncompressedStream, err := gzip.NewReader(gzipStream) if err != nil { log.Fatal("ExtractTarGz: NewReader failed") } tarReader := tar.NewReader(uncompressedStream) for true { header, err := tarReader.Next() if err == io.EOF { break } if err != nil { log.Fatalf("ExtractTarGz: Next() failed: %s", err.Error()) } switch header.Typeflag { case tar.TypeDir: if err := os.Mkdir(header.Name, 0755); err != nil { log.Fatalf("ExtractTarGz: Mkdir() failed: %s", err.Error()) } case tar.TypeReg: outFile, err := os.Create(header.Name) if err != nil { log.Fatalf("ExtractTarGz: Create() failed: %s", err.Error()) } if _, err := io.Copy(outFile, tarReader); err != nil { log.Fatalf("ExtractTarGz: Copy() failed: %s", err.Error()) } outFile.Close() default: log.Fatalf( "ExtractTarGz: uknown type: %s in %s", header.Typeflag, header.Name) } } } func main() { r, err := os.Open("./file.tar.gz") if err != nil { fmt.Println("error") } ExtractTarGz(r) }</code>
En fermant le fichier de sortie immédiatement après avoir copié le contenu du lecteur tar, nous libérons les ressources du descripteur de fichier, qui provoquaient auparavant les erreurs liées au dépassement des limites d'ouverture des fichiers. Ce code mis à jour devrait décompresser avec succès les fichiers tar.gz dans Go.
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!