Go में कोड रिव्यू: क्या जाँचें और कैसे फीडबैक दें
Code review (कोड रिव्यू) केवल एक औपचारिकता नहीं है, बल्कि कोड की गुणवत्ता बढ़ाने, टीम में ज्ञान साझा करने और बग्स को रोकने के सबसे प्रभावी उपकरणों में से एक है। Go (Golang) समुदाय में code review का विशेष महत्व है, क्योंकि यह भाषा सरलता, पठनीयता और मुहावरेदारता को प्रोत्साहित करती है। इस लेख में, हम जानेंगे कि Go कोड की समीक्षा करते समय किन बातों पर ध्यान देना चाहिए और फीडबैक कैसे देना चाहिए ताकि वह उपयोगी हो, न कि आपत्तिजनक।
1. Go में कोड रिव्यू के सामान्य सिद्धांत
तकनीकी विवरणों में जाने से पहले, रिव्यू की संस्कृति को याद रखना महत्वपूर्ण है। आपका लक्ष्य कोड को बेहतर बनाना और सहकर्मी की मदद करना है, न कि अपनी सही साबित करना। यहाँ कुछ सुनहरे नियम दिए गए हैं:
- रचनात्मक बनें। "यह खराब है" कहने के बजाय "यहाँ goroutine लीक हो सकती है, चलिए कॉन्टेक्स्ट जोड़ते हैं" लिखें।
- पूछें, दावा न करें। "आपने
sync.Mutexक्यों चुना, चैनल क्यों नहीं?" — यह एक अच्छा प्रश्न है। "तुम मूर्ख हो, चैनल का उपयोग करना चाहिए था" — यह खराब है। - रिव्यू में देरी न करें। 24 घंटे के भीतर (या टीम की सहमति के अनुसार) उत्तर देने का प्रयास करें।
- तर्क और आर्किटेक्चर पर ध्यान दें। शैलीगत सुधार (स्पेस, इंडेंटेशन)
gofmtपर छोड़ देना बेहतर है।
2. सबसे पहले क्या जाँचें: Go के लिए चेकलिस्ट
यहाँ एक संरचित सूची है कि Go कोड की समीक्षा करते समय किन बातों पर ध्यान देना चाहिए। इसे तार्किक ब्लॉकों में विभाजित करते हैं।
2.1. त्रुटि प्रबंधन
Go में कोई अपवाद नहीं हैं, त्रुटियाँ मान हैं। यह भाषा की प्रमुख मुहावरों में से एक है।
- सभी लौटाई गई त्रुटियों की जाँच करें।
_के साथ त्रुटि को अनदेखा करना केवल बहुत ही दुर्लभ मामलों में स्वीकार्य है (जैसे,io.Discardमें लिखते समय)। - सामान्य त्रुटियों के लिए
panicका उपयोग न करें।panicअपरिवर्तनीय स्थितियों के लिए है (जैसे, सर्वर आरंभीकरण त्रुटि)। - त्रुटियों को लपेटें। संदर्भ जोड़ने के लिए
fmt.Errorf("कुछ गलत हो गया: %w", err)का उपयोग करें। इससेerrors.Is()औरerrors.As()का उपयोग संभव होता है।
// खराब: संदर्भ का नुकसान
if err != nil {
return err
}
// अच्छा: त्रुटि को लपेटना
if err != nil {
return fmt.Errorf("फ़ाइल %s खोलने में विफल: %w", filename, err)
}2.2. गोरुटीन और समवर्तीता
Go अपनी हल्की समवर्तीता के लिए प्रसिद्ध है, लेकिन यह कई बगों का स्रोत भी है।
- गोरुटीन लीक। सुनिश्चित करें कि प्रत्येक चलाई गई goroutine कभी न कभी समाप्त होगी। रद्द करने के लिए कॉन्टेक्स्ट (
context.Context) का उपयोग करें। - चैनलों का सही उपयोग। जो चैनल बनाता है, वही उसे बंद करता है। चैनल बंद करना प्रेषक की जिम्मेदारी है।
- डेटा रेस (data race)। बिना सिंक्रोनाइज़ेशन के एक वेरिएबल में एक साथ लिखने से बचें। म्यूटेक्स (
sync.Mutex) या एटॉमिक्स (sync/atomic) का उपयोग करें।
// goroutine को रद्द करने के लिए कॉन्टेक्स्ट के साथ उदाहरण
func process(ctx context.Context, dataCh chan int) {
for {
select {
case <-ctx.Done():
log.Println("कार्य समाप्त कर रहे हैं")
return
case val, ok := <-dataCh:
if !ok {
return // चैनल बंद है
}
fmt.Println(val)
}
}
}2.3. Go के मुहावरे और शैली
Go एक ऐसी भाषा है जहाँ कोड की पठनीयता को सबसे अधिक महत्व दिया जाता है।
- वेरिएबल के नाम। छोटे दायरे के लिए छोटे नाम। लूप के लिए
i, reader के लिएr। वैश्विक वेरिएबल के लिए लंबे नाम। - "मैजिक नंबर" से बचें। कॉन्स्टेंट का उपयोग करें।