मैं दो चैनलों पर नियमित रूप से सुनना चाहता हूं, जब दोनों चैनलों को हटा दिया जाता है। हालांकि, यदि दोनों चैनलों में डेटा होता है, तो मैं चाहता हूं कि दूसरे को संभालने से पहले एक को निकाला जाए।गो चुनिंदा कथन में प्राथमिकता
नीचे दिए गए कामकाजी उदाहरण में मैं exit
से पहले निकाले जाने के लिए सभी out
की कामना करता हूं। मैं select
-स्टेटमेंट का उपयोग करता हूं जिसमें कोई प्राथमिकता आदेश नहीं है। मैं समस्या के आसपास कैसे हो सकता हूं, बाहर निकलने से पहले सभी 10 आउट-मानों को संभाला जा सकता है?
package main
import "fmt"
func sender(out chan int, exit chan bool){
for i := 1; i <= 10; i++ {
out <- i
}
exit <- true
}
func main(){
out := make(chan int, 10)
exit := make(chan bool)
go sender(out, exit)
L:
for {
select {
case i := <-out:
fmt.Printf("Value: %d\n", i)
case <-exit:
fmt.Println("Exiting")
break L
}
}
fmt.Println("Did we get all 10? Most likely not")
}
विचार मेरे जैसा ही है। लेकिन सच है, 'जारी रखें' कथन के साथ, आप ध्वज की आवश्यकता से छुटकारा पा सकते हैं। होशियार। खैर, यह शायद एक अच्छा जवाब है जैसा कि मैं प्राप्त कर सकता हूं। धन्यवाद! – ANisus
आउट चैनल बंद होने पर यह पहले चयन कथन में असीमित रूप से लूप होगा। – jorelli
जॉरेली, काफी सच है। यदि आप अप्रत्याशित रूप से चैनल को बंद करने वाले शत्रुतापूर्ण या छोटी गाड़ी गोरोटाइन्स की अनुमति देना चाहते हैं, तो आप प्राप्त होने पर ठीक स्थिति की जांच करेंगे। – Sonia