Go में फ़ाइल सिस्टम के साथ काम करना: शुरुआती लोगों के लिए
\n\nGo (Golang) एक आधुनिक कंपाइल की जाने वाली भाषा है जो अपनी सरलता, प्रदर्शन और अंतर्निहित टूल्स के लिए प्रसिद्ध है। किसी भी backend-डेवलपर के प्रमुख कार्यों में से एक फ़ाइल सिस्टम के साथ इंटरैक्शन है: कॉन्फ़िगरेशन पढ़ना, लॉग लिखना, अस्थायी फ़ाइलें और निर्देशिकाएँ बनाना। इस लेख में, हम Go में फ़ाइलों और फ़ोल्डरों के साथ बुनियादी संचालन को समझेंगे, शुरुआत से शुरू करते हुए। यह सामग्री शुरुआती लोगों के लिए है, इसलिए प्रत्येक चरण के साथ समझने योग्य कोड उदाहरण होंगे।
\n\nफ़ाइलों के साथ काम करने के लिए मुख्य पैकेज
\n\nGo की मानक लाइब्रेरी में फ़ाइल सिस्टम के साथ काम करने के लिए दो मुख्य पैकेज हैं:
\n- \n
os— फ़ाइलों, फ़ोल्डरों, एक्सेस अधिकारों और प्रक्रियाओं के साथ निम्न-स्तरीय कार्य। \n io/ioutil(Go 1.16 में अप्रचलित, लेकिन फिर भी उपयोग होता है) — फ़ाइलों को पूरी तरह से पढ़ने/लिखने के लिए सुविधाजनक फ़ंक्शन। \n io— स्ट्रीमिंग इनपुट/आउटपुट के लिए इंटरफ़ेस। \n bufio— बफ़र्ड रीडिंग/राइटिंग (बड़ी फ़ाइलों के लिए उपयोगी)। \n
Go 1.16 से शुरू करके, ioutil के बजाय os पैकेज (os.ReadFile, os.WriteFile) से फ़ंक्शन का उपयोग करने की अनुशंसा की जाती है। हम आधुनिक दृष्टिकोण पर भरोसा करेंगे।
फ़ाइलें पढ़ना
\n\nएक छोटी फ़ाइल को पूरी तरह से पढ़ने का सबसे सरल तरीका os.ReadFile का उपयोग करना है। यह बाइट्स का एक स्लाइस और एक त्रुटि लौटाता है।
package main\n\nimport (\n "fmt"\n "os"\n)\n\nfunc main() {\n // फ़ाइल को पूरी तरह से पढ़ना\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यदि फ़ाइल बड़ी है (उदाहरण के लिए, सैकड़ों मेगाबाइट की लॉग फ़ाइल), तो इसे bufio.Scanner के साथ पंक्ति दर पंक्ति या ब्लॉक में पढ़ना बेहतर है:
package main\n\nimport (\n "bufio"\n "fmt"\n "os"\n)\n\nfunc main() {\n file, err := os.Open("bigfile.log")\n if err != nil {\n fmt.Println("फ़ाइल खोलने में त्रुटि:", err)\n return\n }\n defer file.Close() // फ़ाइल को बंद करना अनिवार्य है\n\n scanner := bufio.NewScanner(file)\n for scanner.Scan() {\n line := scanner.Text()\n fmt.Println(line) // पंक्ति को प्रोसेस करना\n }\n\n if err := scanner.Err(); err != nil {\n fmt.Println("स्कैनिंग में त्रुटि:", err)\n }\n}\n\n\ndefer file.Close() पर ध्यान दें — यह सुनिश्चित करता है कि फ़ंक्शन के समाप्त होने के बाद फ़ाइल बंद हो जाएगी, भले ही कोई त्रुटि हो।
फ़ाइलों में लिखना
\n\nफ़ाइल में डेटा लिखने के लिए os.WriteFile (फ़ाइल बनाता/ओवरराइट करता है) या os.Create + Write (अधिक लचीली लिखने के लिए) का उपयोग करें।
package main\n\nimport (\n "fmt"\n "os"\n)\n\nfunc main() {\n // फ़ाइल में एक स्ट्रिंग लिखना\n text := "नमस्ते, दुनिया!\\nदूसरी पंक्ति।"\n err := os.WriteFile("output.txt", []byte(text), 0644)\n if err != nil {\n fmt.Println("लिखने में त्रुटि:", err)\n return\n }\n fmt.Println("फ़ाइल सफलतापूर्वक लिखी गई")\n}\n\n\nपैरामीटर 0644 Unix-शैली में एक्सेस अधिकार है (मालिक पढ़/लिख सकता है, बाकी केवल पढ़ सकते हैं)।
यदि फ़ाइल के अंत में डेटा जोड़ना (append) है, तो os.O_APPEND फ़्लैग के साथ os.OpenFile का उपयोग करें:
package main\n\nimport (\n "fmt"\n "os"\n)\n\nfunc main() {\n file, err := os.OpenFile("log.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)\n if err != nil {\n fmt.Println("फ़ाइल खोलने में त्रुटि:", err)\n return\n }\n defer file.Close()\n\n _, err = file.WriteString("लॉग में नई प्रविष्टि\\n")\n if err != nil {\n fmt.Println("लिखने में त्रुटि:", err)\n }\n}\n\n\n