Go – Das Praxisbuch by Andreas Schröpfer

Go – Das Praxisbuch by Andreas Schröpfer

Autor:Andreas Schröpfer [Andreas Schröpfer]
Die sprache: eng
Format: epub
Herausgeber: dpunkt
veröffentlicht: 2020-06-01T16:00:00+00:00


Listing 8–11 Der vergessene Zuhörer

In unserem Beispiel definieren wir eine zuhörer()-Funktionen. Diese erwarten eine Nachricht aus dem Channel ch. Das Hauptprogramm erzeugt einen Channel für die Übermittlung von Nachrichten. Anschließend wird in einem Loop zuhörer() als Goroutine gestartet. Dann warten wir eine Sekunde, bis wir die nächste Iteration vornehmen.

Das Schlimme an dieser Situation ist, dass wir zwar pro Sekunde einen Zuhörer mehr bekommen, jedoch keine weitere Nachricht, die geschickt wird. Das bedeutet auch, dass die gestarteten Goroutinen über die ganze Laufzeit des Programms nicht beendet werden. Diese Situation wird Leaking Goroutines genannt.

Eine Lösung hierfür ist, dass die Goroutine auf Senderseite Bescheid gibt, wenn keine Nachrichten mehr über den Channel geschickt werden. Go bietet hierfür die Möglichkeit, den Channel mit close() zu schließen. Über einen geschlossenen Channel können keine weiteren Daten mehr geschickt werden. Deshalb ist es auch nicht notwendig, dass die Goroutinen auf weitere Nachrichten warten. Ein geschlossener Channel blockiert somit nicht.

func main() {

ch := make(chan string)

for i := 0; i < 5; i++ {

go zuhörer(ch)

time.Sleep(time.Second)

}

ch <- "hab nur eine Nachricht"

// keine weiteren Daten mehr

close(ch)

time.Sleep(time.Second)

fmt.Println("Ende")

}



Download



Haftungsausschluss:
Diese Site speichert keine Dateien auf ihrem Server. Wir indizieren und verlinken nur                                                  Inhalte von anderen Websites zur Verfügung gestellt. Wenden Sie sich an die Inhaltsanbieter, um etwaige urheberrechtlich geschützte Inhalte zu entfernen, und senden Sie uns eine E-Mail. Wir werden die entsprechenden Links oder Inhalte umgehend entfernen.