त्रुटि: सशर्त बयानों के अंदर परिवर्तनीय घोषणाएं
जब पहली बार गो का सामना करते हैं, तो आप सशर्त बयानों के भीतर परिवर्तनीय घोषणा के बारे में भ्रम का सामना कर सकते हैं (उदाहरण के लिए, यदि -अन्य)। यह समस्या तब उत्पन्न होती है जब चर (उदाहरण के लिए, req, er) को सशर्त ब्लॉक के अंदर घोषित और असाइन किया जाता है।
परिवर्तनीय दायरा: ब्लॉक स्तर को समझना
गो में, चर एक विशिष्ट दायरे में परिभाषित किया गया है, जो उस ब्लॉक तक सीमित है जिसमें उन्हें घोषित किया गया है। निम्नलिखित उदाहरण पर विचार करें:
package main import "fmt" func main() { a := 1 fmt.Println(a) { // New scope a := 2 fmt.Println(a) } fmt.Println(a) // Prints 1 }
आउटपुट दर्शाता है कि नेस्टेड दायरे के भीतर a के मान को पुन: असाइन करने से उस दायरे के बाहर इसके मान पर कोई प्रभाव नहीं पड़ता है। ऐसा इसलिए है क्योंकि a को स्थानीय रूप से आंतरिक दायरे में घोषित किया जाता है, जिससे वेरिएबल का एक नया उदाहरण तैयार होता है, जैसे:
var a int = 1 var b int = 2 fmt.Println(a) fmt.Println(b)
सशर्त बयानों में अवधारणा को लागू करना
सशर्त बयानों में चर घोषित करने का प्रयास करते समय:
if condition { var req *http.Request var er error }
आपको "req घोषित किया गया और उपयोग नहीं किया गया" या "घोषित किया गया और उपयोग नहीं किया गया" बताते हुए एक त्रुटि का सामना करना पड़ेगा क्योंकि चर केवल सशर्त विवरण के ब्लॉक के भीतर दिखाई देते हैं।
समाधान: सशर्त ब्लॉक के बाहर चर घोषित करें
इस समस्या को हल करने के लिए, सशर्त ब्लॉक के बाहर चर घोषित किया जाना चाहिए:
var req *http.Request var er error if strings.EqualFold(r.Method, "GET") || strings.EqualFold(r.Method, "") { req, er = http.NewRequest(r.Method, r.Uri, b) } else { req, er = http.NewRequest(r.Method, r.Uri, b) }
ऐसा करने से, वेरिएबल पूरे फ़ंक्शन में उपलब्ध होते हैं, यह सुनिश्चित करते हुए कि वे सही ढंग से प्रारंभ किए गए हैं। याद रखें, कोड स्पष्टता बनाए रखने और अप्रत्याशित व्यवहार को रोकने के लिए गो में वेरिएबल स्कोपिंग महत्वपूर्ण है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3