Sto provando a creare un semplice programma per imparare i canali in Go. Ma sto correndo per un errore di stallo, che non riesco a capire"tutte le goroutine sono addormentati - deadlock! Errore di uscita 2" in un programma del ricevitore della stampante
package main
import (
"fmt"
"time"
)
func printer(c chan int) {
for i := 0; i < 10; i++ {
c <- i
time.Sleep(time.Second)
}
}
func reciever(c chan int) {
for {
recievedMsg := <-c
fmt.Println(recievedMsg)
}
}
func main() {
newChanel := make(chan int)
printer(newChanel)
reciever(newChanel)
}
miei pensieri iniziali era qualcosa circa la funzione di spegnimento, ma anche se Io non comprendo questo ho ancora eseguito in questo messaggio di errore e di uscita. Qualcuno può dare qualche suggerimento su come risolvere questo?
Grazie in anticipo
Grazie. L'ho modificato in base ai tuoi suggerimenti e tutti i numeri da 0 a 9 stampe, ma dopo ho ricevuto lo stesso errore. Ho anche aggiunto: \t var stringa di input fmt.Scanln (& input) ma ottengo lo stesso errore dopo che i numeri sono stati stampati. Qualche idea su cosa sto facendo male? – miner
Ho aggiunto il "ricevitore" oltre a rendere la stampante una routine di go, quindi stampa 0-9 senza errori. – miner
Ho modificato in modo preciso come chiudere il canale e terminare la ricezione quando il canale è chiuso. Sembra più pulito (e più riutilizzabile). –