क्या Go में foreach है? शुरुआती लोगों के लिए चरण-दर-चरण विवरण

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

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

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

क्या Go में foreach है? उदाहरणों के साथ चरण-दर-चरण ट्यूटोरियल

\n\n

यदि आप Python, JavaScript या PHP से Go में आए हैं, तो आप निश्चित रूप से कलेक्शन को पार करने के लिए संक्षिप्त foreach के आदी हैं। और अब आप Go में अपना पहला लूप लिख रहे हैं और खुद से पूछ रहे हैं: "मेरा पसंदीदा foreach कहाँ है? क्या वास्तव में Go में यह नहीं है?"

\n\n

स्पॉयलर: Go में वास्तव में कोई सीधा कीवर्ड foreach नहीं है। लेकिन इससे कहीं अधिक लचीली और शक्तिशाली चीज़ है — for range संरचना। इस ट्यूटोरियल में, हम समझेंगे कि Go में इटरेशन कैसे काम करता है, वास्तविक कोड उदाहरण दिखाएंगे और अन्य भाषाओं के परिचित foreach से तुलना करेंगे।

\n\n

Go में foreach क्यों नहीं है और range की आवश्यकता क्यों है?

\n\n

Go एक न्यूनतम भाषा है। इसके निर्माताओं ने जानबूझकर वाक्यात्मक संरचनाओं के दोहराव से परहेज किया। एक अलग कीवर्ड foreach जोड़ने के बजाय, उन्होंने मौजूदा for लूप की क्षमताओं का विस्तार किया। इस प्रकार for range अस्तित्व में आया — ऐरे, स्लाइस, मैप, स्ट्रिंग और यहां तक कि चैनल को पार करने के लिए एक सार्वभौमिक उपकरण।

\n\n

यदि आप Go में foreach का सटीक एनालॉग ढूंढ रहे हैं, तो यह रहा — for range।

\n\n

for range का सिंटैक्स: सरल भाषा में समझाया गया

\n\n

मूल संरचना इस प्रकार दिखती है:

\n\n
for index, value := range collection {\n    // लूप का मुख्य भाग\n}
\n\n

जहाँ:

\n
    \n
  • index — तत्व का इंडेक्स (ऐरे और स्लाइस के लिए) या कुंजी (मैप के लिए)।
  • \n
  • value — तत्व के मान की प्रतिलिपि।
  • \n
  • collection — आपका कलेक्शन (स्लाइस, ऐरे, मैप, स्ट्रिंग या चैनल)।
  • \n
\n\n

एक महत्वपूर्ण बिंदु: value हमेशा तत्व की प्रतिलिपि होती है। यदि आप लूप के अंदर value बदलते हैं, तो मूल तत्व नहीं बदलेगा। मूल को बदलने के लिए, आपको इंडेक्स के माध्यम से एक्सेस करना होगा।

\n\n

उदाहरण 1: स्लाइस को पार करना — Go में foreach का एनालॉग

\n\n

आइए सबसे सामान्य मामले से शुरू करें — स्लाइस के तत्वों को पार करना:

\n\n
package main\n\nimport "fmt"\n\nfunc main() {\n    fruits := []string{"सेब", "केला", "चेरी", "खरबूजा"}\n\n    fmt.Println("स्लाइस को पार करना (foreach का एनालॉग):")\n    for index, fruit := range fruits {\n        fmt.Printf("इंडेक्स %d: %s\\n", index, fruit)\n    }\n}
\n\n

आउटपुट:

\n
स्लाइस को पार करना (foreach का एनालॉग):\nइंडेक्स 0: सेब\nइंडेक्स 1: केला\nइंडेक्स 2: चेरी\nइंडेक्स 3: खरबूजा
\n\n

यदि आपको केवल इंडेक्स चाहिए (उदाहरण के लिए, तत्वों को बदलने के लिए), तो आप मान को छोड़ सकते हैं:

\n\n
for i := range fruits {\n    fruits[i] = "फल: " + fruits[i]\n}
\n\n

और यदि आपको केवल मान चाहिए — तो अंडरस्कोर _ का उपयोग करें:

\n\n
for _, fruit := range fruits {\n    fmt.Println(fruit)\n}
\n\n

उदाहरण 2: मैप को पार करना — क्लासिक foreach

\n\n

Go में मैप को पार करने का for range से अधिक सुरुचिपूर्ण कोई तरीका नहीं है:

\n\n
package main\n\nimport "fmt"\n\nfunc main() {\n    ages := map[string]int{\n        "अन्ना": 25,\n        "बोरिस": 30,\n        "विक्टर": 35,\n    }\n\n    fmt.Println("मैप को पार करना (foreach):")\n    for name, age := range ages {\n        fmt.Printf("%s: %d वर्ष\\n", name, age)\n    }\n}
\n\n

Go में मैप को पार करने का क्रम गारंटीड नहीं है। यदि आपको एक स्थिर क्रम चाहिए, तो कुंजियों को एक स्लाइस में इकट्ठा करें और उसे सॉर्ट करें।

\n\n

उदाहरण 3: स्ट्रिंग को पार करना — वर्ण-दर-वर्ण इटरेशन

\n\n

कई भाषाओं के विपरीत, Go में for range बाइट्स के बजाय रून्स (unicode वर्णों) पर इटरेट करता है:

\n\n
package main\n\nimport "fmt"\n\nfunc main() {\n    text := "नमस्ते, Go!"\n\n    fmt.Println("स्ट्रिंग को वर्णों द्वारा पार करना:")\n    for i, r := range text {\n        fmt.Printf("स्थिति %d: वर्ण '%c' (कोड %U)\\n", i, r, r)\n    }\n}
\n\n

ध्यान दें: इंडेक्स i रून के शुरुआती बाइट को इंगित करता है, न कि वर्ण की क्रम संख्या को। एक-बाइट वर्णों वाली स्ट्रिंग के लिए

ब्लॉग

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