Go में क्लीन कोड कैसे लिखें: प्रोफेशनल्स के लिए 7 नियम

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: Go में क्लीन कोड क्यों ज़रूरी है?

\n\n

Go (या Golang) एक ऐसी भाषा है जो पहली नज़र में सरल और उबाऊ लगती है। इसमें जेनेरिक (1.18 से पहले), क्लासेस, या वर्चुअल मशीन नहीं है। लेकिन यही सादगी इसे क्लीन कोड के लिए एक आदर्श मैदान बनाती है। अगर आप Go में लिख रहे हैं और आपका प्रोजेक्ट goroutine और समझ से बाहर switch स्टेटमेंट्स की स्पेगेटी बन रहा है, तो आप भाषा का मुख्य लाभ खो रहे हैं: तेज़ डेवलपमेंट और आसान मेंटेनेंस।

\n\n

इस लेख में, हम 7 व्यावहारिक नियमों पर चर्चा करेंगे जो आपको इडियोमैटिक Go कोड लिखने में मदद करेंगे, जो न केवल कंपाइलर बल्कि आपके सहकर्मियों (और एक महीने बाद आपको भी) समझ में आएगा। चलिए शुरू करते हैं!

\n\n

1. वेरिएबल के सही नाम: छोटा और स्पष्ट

\n\n

Go में छोटे लेकिन अर्थपूर्ण नामों का उपयोग करने की परंपरा है। Java के विपरीत, जहाँ ListOfUserOrders सामान्य है, Go में आप orders या os देखेंगे। क्यों? क्योंकि Go कोड पढ़ने के लिए है, न कि सिर्फ लिखने के लिए।

\n\n

Go में नेमिंग के मुख्य नियम

\n
    \n
  • लोकल वेरिएबल: स्पष्ट चीज़ों के लिए 1-2 अक्षर (i — काउंटर, s — स्ट्रिंग)।
  • \n
  • पैकेज: एक शब्द, छोटे अक्षर, बिना अंडरस्कोर के (http, fmt)।
  • \n
  • एक्सपोर्ट किए गए आइडेंटिफायर: बड़े अक्षर से शुरू (GetUser)।
  • \n
  • एक्रोनिम: एक ही रजिस्टर में लिखे जाते हैं (HTTP, URL, न कि Http या Url)।
  • \n
\n\n
// खराब\nfunc GetUserDataFromDatabaseByID(userID string) (UserData, error) {\n    var userDataFromDb UserData\n    // ...\n    return userDataFromDb, nil\n}\n\n// अच्छा\nfunc GetUser(id string) (User, error) {\n    var u User\n    // ...\n    return u, nil\n}
\n\n

सुझाव: अगर वेरिएबल का नाम 2 शब्दों से अधिक है, तो संभवतः आप कुछ जटिल बना रहे हैं।

\n\n

2. फ़ॉर्मेटिंग: gofmt पर भरोसा करें

\n\n

Go में "स्टाइल युद्ध" नहीं होते। gofmt कमांड आपके लिए सब कुछ तय करता है। यह कोई सिफारिश नहीं है — यह एक मानक है। अगर आप gofmt का उपयोग नहीं करते, तो आप Go में नहीं, बल्कि "Go की बोली" में लिख रहे हैं।

\n\n

gofmt क्या करता है?

\n
    \n
  • इंडेंटेशन सेट करता है (टैब, स्पेस नहीं)।
  • \n
  • अनावश्यक लाइन ब्रेक हटाता है।
  • \n
  • कमेंट्स को संरेखित करता है।
  • \n
  • अप्रयुक्त इम्पोर्ट हटाता है (-s फ्लैग के साथ)।
  • \n
\n\n
// gofmt से पहले\nfunc  add (a int,b int) int{\nreturn a+b\n}\n\n// gofmt के बाद\nfunc add(a, b int) int {\n    return a + b\n}
\n\n

किसी भी आधुनिक एडिटर (VS Code, GoLand) में, gofmt सेव करने पर अपने आप चलता है। अगर नहीं, तो इसे सेट करें। इससे कोड-रिव्यू में घंटों बचेंगे।

\n\n

3. एरर हैंडलिंग: इग्नोर न करें, पैनिक न करें

\n\n

Go में एक्सेप्शन (try-catch) नहीं है। एरर सिर्फ वैल्यू हैं जिन्हें जाँचने की ज़रूरत है। यह भाषा की सबसे मजबूत विशेषताओं में से एक है, अगर आप इसका सही उपयोग करें।

\n\n

एरर के साथ क्लीन काम करने के नियम

\n
    \n
  • हमेशा error चेक करें। छोड़ने के लिए _ का उपयोग न करें।
  • \n
  • लाइब्रेरी कोड में panic का उपयोग न करें। केवल तब जब प्रोग्राम आगे नहीं चल सकता (जैसे, कॉन्फिग नहीं खुला)।
  • \n
  • एरर को fmt.Errorf("context: %w", err) (Go 1.13+) से रैप करें।
  • \n
\n\n
// खराब\nfunc ReadConfig(path string) *Config {\n    data, _ := ioutil.ReadFile(path) // एरर इग्नोर\n    var cfg Config\n    json.Unmarshal(data, &cfg)\n    return &cfg\n}\n\n// अच्छा\nfunc ReadConfig(path string) (*Config, error) {\n    data, err := ioutil.ReadFile(path)\n    if err != nil {\n        return nil, fmt.Errorf("read config: %w", err)\n    }\n    var cfg Config\n    if err := json.Unmarshal(data, &cfg); err != nil {\n        return nil, fmt.Errorf("parse config: %w", err)\n    }\n    return &cfg, nil\n}

ब्लॉग

पुस्तक अनुशंसाएँ