Go ऑटोमेशन के लिए आदर्श भाषा क्यों है?
\n\nक्या आपने कभी Python में ऐसी स्क्रिप्ट लिखी है जो आपके लैपटॉप पर तो बढ़िया चली, लेकिन सर्वर पर इंटरप्रेटर के सही वर्ज़न के न होने की वजह से 'क्रैश' हो गई? या फिर आपकी Bash स्क्रिप्ट एक अनसपोर्टेड राक्षस में बदल गई जब लॉजिक 'फ़ाइल कॉपी करें' से थोड़ी भी जटिल हुई?
\n\nअगर हाँ, तो आपको Go पर ध्यान देना चाहिए। यह भाषा Google में खास तौर पर उन समस्याओं को हल करने के लिए बनाई गई थी जिनका सामना इंजीनियर यूटिलिटी और सर्विस लिखते समय करते हैं। यह एक ही बाइनरी फ़ाइल में कंपाइल होती है (कोई डिपेंडेंसी नहीं!), बिजली की गति से काम करती है, और इसका सिंटैक्स सरल लेकिन शक्तिशाली है।
\n\nइस लेख में हम आपको सिंटैक्स की बुनियादी बातें नहीं सिखाएँगे। हम सीधे काम की बात पर आएँगे: Go में टास्क ऑटोमेशन वास्तविक कोड उदाहरणों के साथ। आप जानेंगे कि अपनी पहली 'Go स्क्रिप्ट' कैसे लिखें जो उनके Python समकक्षों से ज़्यादा भरोसेमंद और तेज़ काम करेंगी। चलिए शुरू करते हैं!
\n\n1. फ़ाइल सिस्टम के साथ काम: प्रो की तरह लॉग साफ़ करें
\n\nएडमिन या डेवलपर के सबसे आम कामों में से एक है पुराने लॉग को साफ़ करना। आइए एक ऐसी यूटिलिटी लिखें जो किसी दी गई डायरेक्टरी में N दिनों से पुरानी फ़ाइलों को डिलीट करे। यह Go ऑटोमेशन का एक क्लासिक उदाहरण है।
\n\npackage main\n\nimport (\n "fmt"\n "os"\n "path/filepath"\n "time"\n)\n\nfunc main() {\n // लॉग डायरेक्टरी का पथ\n logDir := "/var/log/myapp"\n // 7 दिनों से पुरानी फ़ाइलें डिलीट करें\n maxAge := 7 * 24 * time.Hour\n\n err := filepath.Walk(logDir, func(path string, info os.FileInfo, err error) error {\n if err != nil {\n return err\n }\n\n // डायरेक्टरी को छोड़ें\n if info.IsDir() {\n return nil\n }\n\n // फ़ाइल की उम्र जाँचें\n if time.Since(info.ModTime()) > maxAge {\n fmt.Printf("पुरानी फ़ाइल हटा रहे हैं: %s (उम्र: %v)\\n", path, time.Since(info.ModTime()))\n err := os.Remove(path)\n if err != nil {\n fmt.Printf("हटाने में त्रुटि %s: %v\\n", path, err)\n }\n }\n return nil\n })\n\n if err != nil {\n fmt.Printf("डायरेक्टरी में घूमने में त्रुटि: %v\\n", err)\n }\n}\n\n\nयह कोड इस बात का बेहतरीन उदाहरण है कि कैसे बिना किसी अतिरिक्त लाइब्रेरी के Go में टास्क ऑटोमेट किया जा सकता है। बिल्ट-इन filepath पैकेज फ़ोल्डर्स को रिकर्सिवली एक्सेस करता है, और os.Remove स्पेस खाली करता है। इसे एक बार कंपाइल करके, आपको एक बाइनरी मिलती है जिसे किसी भी सर्वर पर cron के ज़रिए चलाया जा सकता है।
2. HTTP रिक्वेस्ट और API पार्सिंग
\n\nमान लीजिए, आपको कई माइक्रोसर्विसेज़ की स्थिति की निगरानी करनी है या किसी बाहरी API से डेटा पार्स करना है। Go अपने गोरूटीन्स के साथ इसे शानदार तरीके से संभालता है। आइए एक ऐसी स्क्रिप्ट लिखें जो वेबसाइटों की उपलब्धता जाँचे और कुछ डाउन होने पर नोटिफिकेशन भेजे। यह Golang ऑटोमेशन का एक और शक्तिशाली उदाहरण है।
\n\npackage main\n\nimport (\n "fmt"\n "net/http"\n "sync"\n "time"\n)\n\nfunc checkURL(url string, wg *sync.WaitGroup) {\n defer wg.Done()\n\n client := http.Client{\n Timeout: 5 * time.Second,\n }\n\n resp, err := client.Get(url)\n if err != nil {\n fmt.Printf("[FAIL] %s - %v\\n", url, err)\n return\n }\n defer resp.Body.Close()\n\n if resp.StatusCode != http.StatusOK {\n fmt.Printf("[WARN] %s - स्थिति: %d\\n", url, resp.StatusCode)\n } else {\n fmt.Printf("[OK] %s - काम कर रहा है\\n", url)\n }\n}\n\nfunc main() {\n urls := []string{\n "https://google.com",\n "https://github.com",\n "https://pythonlib.ru",\n "https://non-existent-site.xyz",\n }\n\n var wg sync.WaitGroup\n\n for _, url := range urls {\n wg.Add(1)\n go checkURL(url, &wg) // गोरूटीन में चलाएँ\n }\n\n wg.Wait() // सभी गोरूटीन के पूरा होने की प्रतीक्षा करें\n fmt.Println("जाँच पूरी हुई।")\n}\n\n\ns