मैं जाओ चैनलों के साथ कोशिश कर रहा हूँ और यात्रा के दौरान ब्लॉग से समारोह उदाहरण नीचे के साथ भ्रमित:रिटर्निंग चैनल Golang
func gen(nums []int) <-chan int {
out := make(chan int)
go func() {
for _, n := range nums {
out <- n
}
close(out)
}()
fmt.Println("return statement is called ")
return out
}
मुख्य:
func main() {
c := make(<-chan int)
c = gen([]int{2, 3, 4, 5})
// Consume the output.//Print 2,3,4,5
fmt.Println(<-c)
fmt.Println(<-c)
fmt.Println(<-c)
fmt.Println(<-c)
}
पूरा कोड: http://play.golang.org/p/Qh30wzo4m0
मेरे संदेह: 1. मेरी समझ थी, एक बार वापसी कहा जाता है फ़ंक्शन समाप्त कर दिया जाएगा और उस फ़ंक्शन के अंदर चैनल का कोई और जीवन नहीं होगा। यहां वापसी विवरण केवल कॉल किया जाता है एक बार। लेकिन आउट चैनल की सामग्री कई बार ली गई। इस मामले में निष्पादन का वास्तविक प्रवाह कैसा है? जब तक किसी को कहीं पढ़ता है कि चैनल (fmt.Println(<-c)
कॉल)
(यह भी देखें "programming.Kindly मदद
, जल्दी reply.I के लिए धन्यवाद अपनी बात है, लेकिन बाहर चैनल जनरल की वापसी मान के माध्यम से मुख्य कार्य करने के लिए पारित हो जाता है() function.So जब जनरल() समाप्त होता है यह कैसे संभव है? –
जीन समाप्त हो सकता है, लेकिन इसका आंतरिक शाब्दिक जाना func रहता है, एक स्वतंत्र goroutine के रूप में। – VonC
मुख्य में परिवर्तनीय 'सी' जीन() फ़ंक्शन की वापसी है। तो आप जो कह रहे हैं वह है, जीन() के अंदर लाइव गो रूटीन के कारण जीन() समाप्त होने के बाद भी मूल्यों के साथ पॉप्युलेट किया जाएगा ... –