Rumah > Artikel > pembangunan bahagian belakang > Mari kita bincangkan tentang cara Golang menyahmampat fail
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.
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.
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!