Dado el siguiente programa sencillo Irtiro: todos goroutines están dormidos - callejón sin salida
package main
import (
"fmt"
)
func total(ch chan int) {
res := 0
for iter := range ch {
res += iter
}
ch <- res
}
func main() {
ch := make(chan int)
go total(ch)
ch <- 1
ch <- 2
ch <- 3
fmt.Println("Total is ", <-ch)
}
Me pregunto si alguien me puede aclarar por qué tengo
throw: all goroutines are asleep - deadlock!
gracias
No directamente relacionada con la pregunta, pero sigue siendo interesante para la comprensión de goroutines: si se agrega 'fmt.Println ("Salida Total")' 'después de salir <- res' que nunca puede ver que, como el programa puede salir antes, sin esperar a que los goroutines se completen. –
Comencé a aprender Go hace unos días y no puedo entender cómo se resuelve: = 0 se está ejecutando solo una vez? ¿No se supone que la función completa se ejecuta 3 veces? Solo el ciclo se ejecuta 3 veces en su ejemplo. – if237912print
@OybekToirov Toda la función se ejecuta solo una vez, la iteración progresa cada vez que hay algo en el canal int 'en' –