गो के साथ अनज़िप करना हुआ आसान
गो में फ़ाइलों को अनज़िप करना ज़िप पैकेज के साथ बहुत आसान है। इसकी सरलता आपको इस तरह एक उपयोगिता फ़ंक्शन बनाने की अनुमति देती है:
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 }
यह कोड ज़िप संग्रह में प्रत्येक फ़ाइल पर सावधानीपूर्वक पुनरावृत्ति करता है, फ़ाइलपथ वैधता सुनिश्चित करते हुए निर्देशिकाओं और नियमित फ़ाइलों को उचित रूप से संभालता है। ध्यान दें कि क्लोजर दृष्टिकोण अनावश्यक विलंबित स्टैकिंग को समाप्त करता है, एनकैप्सुलेशन को बढ़ाता है, और त्रुटि प्रबंधन को सुव्यवस्थित करता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3