Ich versuche, ein einfaches Programm zu erstellen, um Kanäle in Go zu lernen. Aber ich bin in zu einem Deadlock Fehler läuft, die ich"alle goroutines sind schlafend - Deadlock! Exit Status 2" Fehler in einem Drucker-Empfänger-Programm
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)
}
Meine ersten Gedanken herauszufinden, kann nicht etwas über die Sleep-Funktion, aber selbst wenn ich das DO NOT füge ich noch in diesem Lauf Fehler und beenden Sie die Nachricht. Kann jemand einige Hinweise geben, wie man das löst?
Vielen Dank im Voraus
Dank. Ich habe es nach deinen Tipps modifiziert, und alle Zahlen von 0 - 9 druckt, aber dann bekomme ich den gleichen Fehler danach. Ich fügte auch hinzu: \t var Eingabe String fmt.Scanln (& Eingabe), aber ich bekomme den gleichen Fehler, nachdem die Zahlen gedruckt werden. Irgendeine Idee, was ich falsch mache? – miner
Ich habe "Go Reciever" hinzugefügt, um den Drucker zur Routine zu machen, und druckt dann 0 - 9 ohne Fehler. – miner
Ich bearbeitete genau, wie Sie den Kanal schließen und den Empfang beenden sollen, wenn der Kanal geschlossen ist. Es scheint sauberer (und wiederverwendbarer). –