"Go में स्ट्रिंग को इंटीजर टाइप में कैसे बदलें?" — शुरुआती लोगों को परेशान करने वाला सवाल
\n\nजो कोई भी Go में कोडिंग शुरू करता है, वह देर-सबेर एक दीवार से टकराता है: "42" जैसी स्ट्रिंग को असली नंबर 42 में बदलना। यह आसान लगता है, है ना? लेकिन Stack Overflow पर इस सवाल के हज़ारों व्यूज़ हैं और इसके नीचे दर्जनों कमेंट्स में सामान्य गलतियाँ बताई गई हैं। ऐसा क्यों होता है?
Go में Python या JavaScript की तरह int("42") जैसा कोई शॉर्टकट नहीं है। इसके बजाय, एक शक्तिशाली लेकिन सख्त पैकेज strconv है, जो आपको यह सोचने पर मजबूर करता है कि क्या गलत हो सकता है। और यह सही है: आप सीधे स्ट्रिंग को int में नहीं डाल सकते, क्योंकि स्ट्रिंग खराब, खाली या अतिरिक्त स्पेस वाली हो सकती है।
इस लेख में हम Go में स्ट्रिंग को नंबर में बदलने के असली उदाहरण देखेंगे, उन गलतियों पर चर्चा करेंगे जो अनुभवी डेवलपर्स भी करते हैं, और काम करने वाले कोड टेम्पलेट देंगे। चलिए शुरू करते हैं!
\n\n1. मुख्य टूल: strconv पैकेज
\n\nGo की स्टैंडर्ड लाइब्रेरी में स्ट्रिंग को नंबर में बदलने के लिए strconv पैकेज है। इसमें तीन मुख्य फंक्शन हैं:
- \n
Atoi(s string) (int, error)— सबसे आसान तरीका, स्ट्रिंग कोintमें बदलता है (बिट साइज़ प्लेटफ़ॉर्म पर निर्भर: 32 या 64 बिट)। \n ParseInt(s string, base int, bitSize int) (int64, error)— पूरा कंट्रोल देता है: नंबर सिस्टम का बेस (10, 16, 2) और बिट साइज़ (0, 8, 16, 32, 64)। \n ParseUint(s string, base int, bitSize int) (uint64, error)— वही, लेकिन बिना साइन वाले नंबरों के लिए। \n
सबसे आम गलती है रिटर्न होने वाली एरर को इग्नोर करना। आइए देखते हैं इसका क्या नतीजा होता है।
\n\nउदाहरण 1: एरर इग्नोर करना — बग पैदा करना
\n\npackage main\n\nimport (\n "fmt"\n "strconv"\n)\n\nfunc main() {\n s := "123abc"\n num, _ := strconv.Atoi(s) // एरर को निगल लिया गया!\n fmt.Println(num) // आउटपुट: 0 — और आपको पता भी नहीं चलेगा कि क्या गलत हुआ\n}\n\n\nGo में एक्सेप्शन नहीं होते, एरर एक वैल्यू है। अगर आप इसे इग्नोर करते हैं (_), तो आपको जीरो वैल्यू (0) मिलेगी और आप डीबग करने में घंटों बिताएँगे, सोचते रहेंगे कि आपका प्रोग्राम अजीब क्यों व्यवहार कर रहा है। हमेशा एरर को हैंडल करें!
2. Golang में string को int में बदलने की टॉप-5 गलतियाँ
\n\nहमने Stack Overflow पर सवालों का विश्लेषण किया और सबसे आम समस्याएँ निकालीं। ये रहीं वे:
\n\nगलती #1: स्पेस और अदृश्य कैरेक्टर
\n\nस्ट्रिंग " 42 " या "42\\n" — Atoi एरर रिटर्न करेगा। Go अतिरिक्त कैरेक्टर बर्दाश्त नहीं करता, कुछ भाषाओं के विपरीत जो ऑटोमैटिकली स्ट्रिंग को ट्रिम कर देती हैं।
s := " 42 "\nnum, err := strconv.Atoi(s)\nif err != nil {\n fmt.Println("एरर:", err) // strconv.Atoi: parsing " 42 ": invalid syntax\n}\n\n\nसमाधान: कन्वर्ट करने से पहले strings.TrimSpace() का उपयोग करें।
import "strings"\n\ns := " 42 "\ns = strings.TrimSpace(s)\nnum, err := strconv.Atoi(s)\nif err == nil {\n fmt.Println(num) // 42\n}\n\n\nगलती #2: खाली स्ट्रिंग
\n\nखाली स्ट्रिंग "" भी एरर देती है। कई शुरुआती सोचते हैं कि खाली स्ट्रिंग 0 में बदल जाएगी, लेकिन ऐसा नहीं है।
num, err := strconv.Atoi("")\n// err: strconv.Atoi: parsing "": invalid syntax\n\n\nसमाधान: स्ट्रिंग की लंबाई जाँचें या एरर को स्पष्ट रूप से हैंडल करें और डिफ़ॉल्ट वैल्यू डालें।
\n\nगलती #3: ओवरफ़्लो (Overflow)
\n\nअगर स्ट्रिंग में ऐसा नंबर है जो चुने गए टाइप में फ़िट नहीं होता, तो Atoi या ParseInt ErrRange एरर और उस टाइप की अधिकतम/न्यूनतम वैल्यू रिटर्न करेंगे।
s := "99999999999999999999" // int64 से बड़ा\nnum, err := strconv.ParseInt(s, 10, 64)\nif err != nil {\n fmt.Println("एरर:", err) // strconv.ParseInt: parsing "99999999999999999999": value out of range\n}\n\n\nसमाधान: हमेशा एरर चेक करें और ओवरफ़्लो के लिए ErrRange को हैंडल करें।
गलती #4: गलत बेस का उपयोग
\n\nअगर आप ParseInt का उपयोग कर रहे हैं और बेस 10 के बजाय 16 (हेक्साडेसिमल) सेट करते हैं, तो "42" को 66 (4*16 + 2) के रूप में पार्स किया जाएगा।
num, _ := strconv.ParseInt("42", 16, 64)\nfmt.Println(num) // 66\n\n\nसमाधान: सुनिश्चित करें कि आप सही बेस (आमतौर पर 10) का उपयोग कर रहे हैं।
\n\nगलती #5: लोकलाइज़्ड नंबर फ़ॉर्मेट
\n\nअगर स्ट्रिंग में कॉमा (जैसे "1,234") या दशमलव बिंदु है, तो Atoi और ParseInt एरर देंगे।
num, err := strconv.Atoi("1,234")\n// err: strconv.Atoi: parsing "1,234": invalid syntax\n\n\nसमाधान: पहले कॉमा हटाएँ या strconv.ParseFloat का उपयोग करें और फिर इंटीजर में बदलें।
निष्कर्ष
\n\nGo में स्ट्रिंग को नंबर में बदलना सीखना ज़रूरी है। हमेशा एरर हैंडल करें, strings.TrimSpace() का उपयोग करें, और सही बेस चुनें। इन टिप्स से आप सामान्य गलतियों से बच सकते हैं और अपनी कोडिंग को बेहतर बना सकते हैं।