Go में कोड रिव्यू: क्या जाँचें और फीडबैक कैसे दें
\n\nकोड रिव्यू सिर्फ एक औपचारिकता नहीं है, बल्कि डेवलपमेंट का एक महत्वपूर्ण चरण है। खासकर Go में, जहाँ कोड की सरलता और पठनीयता भाषा के दर्शन में निहित है। शुरुआती डेवलपर्स के लिए यह डरावना लग सकता है: दूसरे के कोड की आलोचना कैसे करें, जब आप खुद अभी आश्वस्त नहीं हैं? वास्तव में, कोड रिव्यू सीखने का सबसे अच्छा तरीका है। इस लेख में, हम चर्चा करेंगे कि Go कोड की समीक्षा करते समय किन बातों पर ध्यान देना चाहिए और फीडबैक कैसे दें जो उपयोगी हो, न कि आपत्तिजनक।
\n\n1. मूल सिद्धांत: सबसे पहले क्या देखें
\n\nविवरण में जाने से पहले, मुख्य नियम याद रखें: रिव्यू कोड के बारे में है, व्यक्ति के बारे में नहीं। आपका लक्ष्य संभावित समस्याओं को ढूँढना और उत्पाद की गुणवत्ता में सुधार करना है, न कि यह साबित करना कि आप अधिक बुद्धिमान हैं। सरल चीजों से शुरू करें:
\n\n- \n
- तार्किक त्रुटियाँ: क्या सीमांत मामलों को सही ढंग से संभाला गया है? उदाहरण के लिए, यदि स्लाइस खाली है तो क्या होगा? \n
- संभावित पैनिक: क्या आप
nilके बारे में भूल गए हैं? जाँचें कि आप शून्य पॉइंटर पर मेथड कॉल नहीं कर रहे हैं। \n - अप्रयुक्त कोड: Go में यह कंपाइलेशन त्रुटि का कारण बनता है, लेकिन कभी-कभी मृत वेरिएबल या इम्पोर्ट रह जाते हैं। \n
शुरुआती की विशिष्ट त्रुटि का उदाहरण:
\n\nfunc getFirstElement(s []int) int {\n return s[0] // पैनिक, यदि स्लाइस खाली है!\n}\n\nरिव्यू में क्या सुझाव दें: स्लाइस की लंबाई की जाँच जोड़ें और त्रुटि लौटाएँ।
\n\nfunc getFirstElement(s []int) (int, error) {\n if len(s) == 0 {\n return 0, fmt.Errorf("slice is empty")\n }\n return s[0], nil\n}\n\n2. Go मुहावरे: "गो-शैली" में कैसे लिखें
\n\nGo Java या Python नहीं है। इसकी अपनी शैली है, जिसका सम्मान किया जाना चाहिए। रिव्यू में निम्नलिखित बिंदुओं पर ध्यान दें:
\n\n- \n
- नामकरण: Go में छोटे नामों का उपयोग किया जाता है (जैसे, रीडर के लिए
r, राइटर के लिएw)। वेरिएबल कोmyReaderनाम देने की आवश्यकता नहीं है — बसrकहें। \n - त्रुटि प्रबंधन: त्रुटियों को अनदेखा न करें! यदि कोई फंक्शन
errorलौटाता है, तो उसे जाँचना चाहिए। अपवादfmt.Printlnऔर इसी तरह के हैं, लेकिन उन्हें भी लॉग करना बेहतर है। \n - इंटरफ़ेस: वे छोटे होने चाहिए। एक मेथड अच्छा है, दो पहले से ही बहुत हैं। "भविष्य के लिए" इंटरफ़ेस न बनाएँ। \n
"गो-शैली" नहीं वाले कोड का उदाहरण:
\n\nfunc ProcessData(data []string) (bool, error) {\n var result bool\n for _, item := range data {\n if item == "error" {\n result = false\n return result, errors.New("found error")\n }\n }\n result = true\n return result, nil\n}\n\nयहाँ result की आवश्यकता नहीं है — सीधे true या false लौटाया जा सकता है। साथ ही, फ़ॉर्मेटिंग के लिए fmt.Errorf का उपयोग करना चाहिए।
func ProcessData(data []string) (bool, error) {\n for _, item := range data {\n if item == "error" {\n return false, fmt.Errorf("found error in item: %s", item)\n }\n }\n return true, nil\n}\n\n3. प्रदर्शन और मेमोरी: किन बातों पर ध्यान दें
\n\nहालाँकि Go काफी तेज़ है, खराब कोड सब कुछ बर्बाद कर सकता है। रिव्यू में जाँचें:
\n\n- \n
- अनावश्यक आवंटन से बचें: यदि आप स्लाइस का आकार जानते हैं, तो क्षमता निर्दिष्ट करते हुए
makeका उपयोग करें। \n - स्ट्रक्चर की कॉपी करना: बड़े स्ट्रक्चर को पॉइंटर द्वारा पास करना बेहतर है, ताकि हर बार उनकी कॉपी न हो। \n
- गोरूटीन: जाँचें कि क्या आप चैनल बंद करना या गोरूटीन के पूरा होने की प्रतीक्षा करना भूल गए हैं (
sync.WaitGroupका उपयोग करें)। \n
स्लाइस के साथ खराब काम का उदाहरण:
\n\nfunc appendItems(items []int) []int {\n var result []int\n for _, v := range items {\n