Go में फ़ाइल सिस्टम के साथ काम करना: व्यावहारिक गाइड
\n\nफ़ाइल सिस्टम के साथ काम करना किसी भी सर्वर एप्लिकेशन का एक बुनियादी कार्य है। Go (Golang) भाषा फ़ाइलों और डायरेक्ट्री को पढ़ने, लिखने, हटाने और प्रबंधित करने के लिए एक शक्तिशाली और सुंदर टूलकिट प्रदान करती है। इस लेख में, हम मानक पैकेज os, io/ioutil (Go 1.16 से पहले) और io का उपयोग करके Go में फ़ाइलों के साथ काम करने के व्यावहारिक उदाहरण देखेंगे। आप सीखेंगे कि डिस्क पर डेटा को कुशलतापूर्वक कैसे प्रबंधित करें, त्रुटियों को कैसे संभालें और साफ कोड कैसे लिखें।
1. मूल बातें: फ़ाइलें खोलना, पढ़ना और लिखना
\n\nचलिए सबसे सामान्य ऑपरेशनों से शुरू करते हैं। फ़ाइल खोलने के लिए os.OpenFile फ़ंक्शन या इसके सरल रैपर os.Create और os.Open का उपयोग किया जाता है। आइए पूरी फ़ाइल को मेमोरी में पढ़ने का एक उदाहरण देखें:
package main\n\nimport (\n "fmt"\n "os"\n)\n\nfunc main() {\n // पूरी फ़ाइल पढ़ना (Go 1.16 से पहले ioutil.ReadFile का उपयोग होता था)\n data, err := os.ReadFile("example.txt")\n if err != nil {\n fmt.Println("फ़ाइल पढ़ने में त्रुटि:", err)\n return\n }\n fmt.Println("फ़ाइल की सामग्री:")\n fmt.Println(string(data))\n}\n\n\nफ़ाइल में डेटा लिखने के लिए os.WriteFile का उपयोग करें:
package main\n\nimport (\n "os"\n)\n\nfunc main() {\n content := []byte("नमस्ते, Go दुनिया!\\nदूसरी पंक्ति।")\n err := os.WriteFile("output.txt", content, 0644)\n if err != nil {\n panic(err)\n }\n // output.txt फ़ाइल बन गई है और इसमें हमारा टेक्स्ट है\n}\n\n\nयदि आपको फ़ाइल के अंत में डेटा जोड़ना है, तो फ़्लैग का उपयोग करें:
\n\nfile, err := os.OpenFile("log.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)\nif err != nil {\n panic(err)\n}\ndefer file.Close()\n\nif _, err := file.WriteString("लॉग में नई प्रविष्टि\\n"); err != nil {\n panic(err)\n}\n\n\n2. डायरेक्ट्री के साथ काम करना: बनाना, हटाना और ट्रैवर्स करना
\n\nफ़ोल्डरों का प्रबंधन भी उतना ही महत्वपूर्ण है। नई डायरेक्ट्री बनाने के लिए os.Mkdir (एक फ़ोल्डर) या os.MkdirAll (रिकर्सिवली, जैसे mkdir -p) का उपयोग करें:
package main\n\nimport (\n "fmt"\n "os"\n)\n\nfunc main() {\n // एक फ़ोल्डर बनाएं\n err := os.Mkdir("data", 0755)\n if err != nil {\n fmt.Println("फ़ोल्डर बनाने में त्रुटि:", err)\n }\n\n // रिकर्सिवली नेस्टेड स्ट्रक्चर बनाएं\n err = os.MkdirAll("data/subdir/logs", 0755)\n if err != nil {\n fmt.Println("त्रुटि:", err)\n }\n}\n\n\nडायरेक्ट्री को ट्रैवर्स करने के लिए os.ReadDir फ़ंक्शन का उपयोग करें (ioutil.ReadDir का रिप्लेसमेंट):
entries, err := os.ReadDir(".")\nif err != nil {\n panic(err)\n}\n\nfor _, entry := range entries {\n fmt.Printf("नाम: %s, फ़ोल्डर: %t\\n", entry.Name(), entry.IsDir())\n}\n\n\nसभी फ़ाइलों और फ़ोल्डरों को रिकर्सिवली ट्रैवर्स करने के लिए path/filepath पैकेज से filepath.Walk का उपयोग करें:
package main\n\nimport (\n "fmt"\n "os"\n "path/filepath"\n)\n\nfunc main() {\n err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {\n if err != nil {\n return err\n }\n fmt.Println(path)\n return nil\n })\n if err != nil {\n fmt.Println("ट्रैवर्स करने में त्रुटि:", err)\n }\n}\n\n\nफ़ाइलों और फ़ोल्डरों को हटाने के लिए os.Remove और os.RemoveAll फ़ंक्शन का उपयोग करें:
// एक फ़ाइल या खाली फ़ोल्डर हटाएं\nos.Remove("temp.txt")\n\n// फ़ोल्डर को उसकी सभी सामग्री सहित हटाएं (rm -rf का एनालॉग)\nos.RemoveAll("data")\n\n\n3. उन्नत तकनीकें: बफ़र्ड इनपुट/आउटपुट और टेम्पररी फ़ाइलों के साथ काम करना
\n\nबड़ी फ़ाइलों के लिए पूरी सामग्री को मेमोरी में पढ़ना अकुशल है। bufio का उपयोग करके बफ़र्ड रीडिंग करें:
package main\n\nimport (\n "bufio"\n "