विचार है कि स्लाइस में चैनलों की एक चर संख्या है, उनके द्वारा प्राप्त प्रत्येक मान को एक चैनल में दबाएं, और इनपुट चैनल बंद होने के बाद इस आउटपुट चैनल को बंद करें। कुछ इस तरह, लेकिन दो से अधिक चैनलों के एक नंबर के लिए:क्या कई चैनलों को एक में मल्टीप्लेक्स करना संभव है?
func multiplex(cin1, cin2, cout chan int) {
n := 2
for {
select {
case v, ok := <-cin1:
if ok {
cout <- v
} else {
n -= 1
}
case v, ok := <-cin2:
if ok {
cout <- v
} else {
n -= 1
}
}
if n == 0 {
close(cout)
break
}
}
}
ऊपर कोड व्यस्त पाशन से बचा जाता है के बाद से कोई default
मामला है, जो अच्छा है (संपादित करें: यह की उपस्थिति की तरह ", ठीक है" लग रहा है चुनिंदा बयान गैर-अवरुद्ध करता है और लूप सभी के बाद व्यस्त होता है। लेकिन उदाहरण के लिए, कोड के बारे में सोचें जैसे यह ब्लॉक होगा)। इनपुट चैनलों की मनमानी संख्या के साथ समान प्रकार की कार्यक्षमता भी हासिल की जा सकती है? जाहिर है, यह स्लाइस जोड़ी को एक चैनल में कम करके किया जा सकता है, लेकिन यदि संभव हो, तो मैं एक सरल समाधान में अधिक रुचि रखूंगा।
आह, बहुत अच्छा समाधान, स्पष्ट और संक्षिप्त। धन्यवाद! – elpres
अब फ़ंक्शन वाला एक पैकेज है (https://godoc.org/github.com/eapache/channels#Multiplex) जो कई goroutines के बजाय प्रतिबिंब का उपयोग कर समस्या हल करता है। – Evan