Heim > Artikel > Backend-Entwicklung > Wie dekomprimiere ich tar.gz-Dateien in Go, ohne die Dateiöffnungsgrenzen zu überschreiten?
Tar.gz-Dateien in Go dekomprimieren
Das Dekomprimieren von tar.gz-Dateien in Go erfordert die Verwendung der Pakete archive/tar und compress/gzip. Während ein Beispielcode bereitgestellt wurde, traten Probleme im Zusammenhang mit den Dateiöffnungsbeschränkungen auf.
Um dieses Problem zu beheben, schlagen wir unten eine aktualisierte Lösung vor, die die Art und Weise ändert, wie die Ausgabedatei geschlossen wird.
<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>
Indem wir die Ausgabedatei unmittelbar nach dem Kopieren des Inhalts aus dem TAR-Reader schließen, geben wir Dateideskriptorressourcen frei, die zuvor die Fehler im Zusammenhang mit der Überschreitung der Grenzwerte für offene Dateien verursachten. Dieser aktualisierte Code sollte tar.gz-Dateien in Go erfolgreich dekomprimieren.
Das obige ist der detaillierte Inhalt vonWie dekomprimiere ich tar.gz-Dateien in Go, ohne die Dateiöffnungsgrenzen zu überschreiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!