Go Academy · पाठ

select कथन

select से चैनलों का बहुसंकेतन

पाठ 1, कुल 4 में से13 चरण

select कथन, CoddyKit पर Go Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Go Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

select क्या है

select कथन किसी गोरूटीन को एक साथ कई चैनल कार्रवाइयों की प्रतीक्षा करने देता है। यह आगे बढ़ने के लिए तैयार होने वाले पहले केस को चुनता है। यह switch जैसा है, लेकिन चैनलों के लिए।

मूल सिंटैक्स

select में हर case चैनल को भेजने या उससे प्राप्त करने की क्रिया होती है:

select {
case msg := <-ch1:
    fmt.Println("ch1:", msg)
case msg := <-ch2:
    fmt.Println("ch2:", msg)
}

default के साथ बिना अवरोध के संचालन

default केस जोड़ने से select बिना अवरोध के काम करता है — यदि कोई चैनल तैयार न हो, तो यह तुरंत default पर चला जाता है।

select {
case v := <-ch:
    fmt.Println(v)
default:
    fmt.Println("no value ready")
}

यादृच्छिक चयन

जब एक ही समय पर कई केस तैयार हों, तो Go उनमें से एक को यादृच्छिक रूप से चुनता है — हर तैयार केस के चुने जाने की समान संभावना होती है। इससे किसी केस को अनिश्चित समय तक अवसर न मिलने की समस्या रुकती है।

select में भेजना

केस चैनल में भेजने की क्रियाएँ भी हो सकती हैं। भेजने वाला केस तब तैयार होता है, जब चैनल में बफ़र की जगह हो (या कोई प्राप्तकर्ता प्रतीक्षा कर रहा हो)।

select {
case ch1 <- val1:
    fmt.Println("sent to ch1")
case ch2 <- val2:
    fmt.Println("sent to ch2")
}

खाली select हमेशा अवरुद्ध रहता है

बिना किसी केस वाला खाली select{} वर्तमान गोरूटीन को हमेशा के लिए अवरुद्ध कर देता है। अन्य गोरूटीनों को चलते रहने देते हुए मुख्य गोरूटीन को सक्रिय रखने के लिए यह एक सामान्य तरीका है।

func main() {
    go serve()
    select {} // block forever
}

select के साथ लूप चलाना

चैनलों को लगातार एक साथ संचालित करने के लिए select को for लूप के भीतर रखें। साफ़ तरीके से लूप से बाहर निकलने के लिए done चैनल जोड़ें।

for {
    select {
    case v := <-data:
        process(v)
    case <-done:
        return
    }
}

nil चैनल

select केस में nil चैनल हमेशा के लिए अवरुद्ध रहता है, जिससे वह केस प्रभावी रूप से निष्क्रिय हो जाता है। इसका उपयोग रनटाइम पर केसों को गतिशील रूप से सक्रिय या निष्क्रिय करने के लिए किया जा सकता है।

var ch chan int // nil
select {
case v := <-ch: // never selected
    _ = v
case v := <-other:
    fmt.Println(v)
}

बंद चैनलों के साथ select

बंद चैनल से प्राप्त करना हमेशा तुरंत सफल होता है और शून्य मान लौटाता है। बंद होने का पता लगाने के लिए दो-मान वाले रूप का उपयोग करें।

select {
case v, ok := <-ch:
    if !ok { return } // channel closed
    use(v)
}

प्राथमिकता के पैटर्न

Go का select मूल रूप से प्राथमिकताओं का समर्थन नहीं करता। किसी एक चैनल को प्राथमिकता देने के लिए selects को एक-दूसरे के भीतर रखें या ऐसा लूप इस्तेमाल करें, जो default के साथ पहले high-priority चैनल की जाँच करे।

for {
    select {
    case v := <-highPriority:
        handle(v)
    default:
        select {
        case v := <-lowPriority:
            handle(v)
        }
    }
}

अब तक का पुनरावलोकन

select कई चैनलों पर प्रतीक्षा करता है, तैयार केस को यादृच्छिक रूप से चुनता है, बिना अवरोध के संचालन के लिए default का समर्थन करता है और nil चैनल केसों को निष्क्रिय कर देते हैं। सामान्य पैटर्न: for+select+done।

त्वरित जाँच

जब select में कई केस एक ही समय पर तैयार हों, तो क्या होता है?

पुनरावलोकन: select कथन

मुख्य बातें:

  • select तब तक अवरुद्ध रहता है, जब तक कोई चैनल केस तैयार न हो जाए
  • कई तैयार केस → यादृच्छिक चयन
  • default इसे बिना अवरोध के संचालित करता है
  • nil चैनल अपने केस को निष्क्रिय कर देता है
  • for+select+done मानक बहु-चैनल संचालन लूप है
शुरुआत निःशुल्क

एआई शिक्षक के साथ Go सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “select कथन” पाठ निःशुल्क है?

हाँ — Go Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “select कथन” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“select कथन” में मैं क्या सीखूँगा?

select से चैनलों का बहुसंकेतन आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Go Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Go Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Go Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“select कथन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Go Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Go Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. select कथन
  2. टाइमआउट और टिकर
  3. Fan-in और Fan-out प्रतिरूप
  4. वर्कर पूल प्रतिरूप
← Go Academy पर वापस जाएँ