sto provando con canali Go e confusi con sotto esempio funzione dal blog Go:Restituzione Canali 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
}
principale:
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)
}
codice completo: http://play.golang.org/p/Qh30wzo4m0
miei dubbi: 1. La mia comprensione è stata, una volta che il ritorno è stato chiamato, la funzione sarà terminata e il canale all'interno di quella funzione non ha più vita. La dichiarazione di ritorno è chiamata solo una volta.Ma il contenuto del canale Out è stato preso più volte. In questo caso, qual è il flusso effettivo di esecuzione? Sono nuovo di Concurrent programming.Kindly aiutare
, Grazie per reply.I rapido ottenuto il vostro punto, ma il canale è passato alla funzione principale che attraversa il valore di ritorno del Gen() function.So quando gen() è terminato Come è possibile? –
gen può essere terminato, ma la sua funzione di lettura letterale interna rimane, come una goroutine indipendente. – VonC
variabile 'c' nella principale è il ritorno di gen() function.So quello che stai dicendo è, verrà popolata con valori anche dopo gen() terminato a causa di vivere andare di routine all'interno gen() ... –