Menyahzip Menjadi Mudah dengan Go
Menyahzip fail dalam Go adalah mudah dengan pakej zip. Kesederhanaannya membolehkan anda mencipta fungsi utiliti seperti ini:
func Unzip(src, dest string) error { r, err := zip.OpenReader(src) if err != nil { return err } defer func() { if err := r.Close(); err != nil { panic(err) } }() os.MkdirAll(dest, 0755) // Closure isolates file descriptor .Close() calls extractAndWriteFile := func(f *zip.File) error { rc, err := f.Open() if err != nil { return err } defer func() { if err := rc.Close(); err != nil { panic(err) } }() path := filepath.Join(dest, f.Name) // Prevent ZipSlip vulnerability if !strings.HasPrefix(path, filepath.Clean(dest)+string(os.PathSeparator)) { return fmt.Errorf("illegal file path: %s", path) } if f.FileInfo().IsDir() { os.MkdirAll(path, f.Mode()) } else { os.MkdirAll(filepath.Dir(path), f.Mode()) f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) if err != nil { return err } defer func() { if err := f.Close(); err != nil { panic(err) } }() _, err = io.Copy(f, rc) if err != nil { return err } } return nil } for _, f := range r.File { err := extractAndWriteFile(f) if err != nil { return err } } return nil }
Kod ini dengan teliti melelaran setiap fail dalam arkib zip, mengendalikan direktori dan fail biasa dengan sewajarnya sambil memastikan kesahihan laluan fail. Ambil perhatian bahawa pendekatan penutupan menghapuskan tindanan penangguhan yang tidak perlu, meningkatkan enkapsulasi dan memperkemas pengendalian ralat.
Atas ialah kandungan terperinci Bagaimana untuk Membongkar Fail dengan Mudah dalam Go dengan Pakej `zip`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!