Próbuję z kanałami Go i zmieszany z poniżej przykład funkcja GO blogu:Powracający kanały 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
}
główne:
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)
}
kompletny kod: http://play.golang.org/p/Qh30wzo4m0
moje wątpliwości: 1.Moje zrozumienie było, po powrocie nazywa się funkcja zostanie zakończona i kanał wewnątrz tej funkcji nie ma więcej życia.Tutaj zwraca się tylko wezwanie raz. Ale zawartość Out kanału podjęte wiele razy.W tym przypadku jak jest faktyczny przepływ wykonania? Jestem nowy jednoczesnych programming.Kindly pomóc
, Dzięki za szybką reply.I dostał swój punkt, ale na zewnątrz kanału jest przekazywany do funkcji głównego wartości zwracanej przez gen() function.So gdy gen() kończy się Jak to jest możliwe? –
gen może zostać zakończony, ale jego wewnętrzny literał go func pozostaje, jako niezależny goroutine. – VonC
Zmienna 'c' w głównym jest powrotem funkcji gen(). Tak więc mówisz, że będzie ona wypełniona wartościami nawet po zakończeniu gen() z powodu rutyny na żywo wewnątrz gen() ... –