Warum wird meine Goroutine nicht ausgeführt?

8

Ich lerne Go und ich wollte versuchen, Goroutines und Kanäle.

Hier ist mein Code:

%Vor%

Und hier ist das Ergebnis:

%Vor%

Ich verstehe nicht, warum meine Goroutine nie ausgeführt wird. Die "Eingabe der Goroutine" wird nicht gedruckt und ich habe keine Fehlermeldung.

    
SuperPython 26.06.2014, 08:38
quelle

2 Antworten

15

Tatsache ist, dass Ihre Goroutine startet, aber beendet wird, bevor Sie irgendwas machen, weil Ihr Programm direkt nach dem Drucken stoppt Done! : Die Ausführung von goroutines ist unabhängig vom Hauptprogramm, wird aber gleichzeitig mit dem Programm beendet. Also im Grunde brauchen Sie einen Prozess, um das Programm auf sie warten zu lassen. Es könnte ein anderer Kanal sein, der auf eine Anzahl von Nachrichten wartet, ein sync.WaitGroup oder andere Tricks.

Sie sollten den ausgezeichneten Post über Parallelität in go im Golang Blog lesen.

    
Elwinar 26.06.2014, 08:47
quelle
5

Ihre Goroutine hat nicht genug Zeit, um ausgeführt zu werden, da die Hauptfunktion nach dem Drucken von Done! beendet wird.

Sie müssen etwas tun, damit das Programm auf die Gorroutine wartet.

Am einfachsten fügen Sie am Ende ein time.Sleep() hinzu.

%Vor%
  

Eingabe der Goroutine ...
  ein
  zwei
  drei
  Fertig!

Spielplatz

Während dies funktioniert, wird empfohlen, zusätzlich zu den Goroutinen auch Kanäle oder Funktionen aus dem sync -Paket zu verwenden, um den gleichzeitigen Code zu synchronisieren.

Beispiel:

%Vor%
  

Eingabe der Goroutine ...
  erhielt einen
  erhielt zwei
  erhielt drei
  Fertig!

Spielplatz

    
Intermernet 26.06.2014 08:47
quelle

Tags und Links