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


func laeufer(start chan struct{}) {

<-start

// ... los geht's

}

Listing 8–13 Auf die Plätze, fertig, los!

In unserem kleinen Wettrennen erzeugen wir einen Channel, über den wir alle Goroutinen zeitgleich starten lassen können. Als Typ verwenden wir ein struct, also eine leere Struktur. Dieser Typ ist üblich, wenn wir keine Daten über den Channel schicken wollen. Das hat zwei Vorteile: Zum einen muss für den Typ kein Arbeitsspeicher für einen Wert bereitgestellt werden, zum anderen erkennen wir an diesem Typ, dass auch kein Wert verschickt wird.

Alle laeufer() warten, bis der Channel geschlossen wird. Sobald wir mit close() den Channel schließen, laufen die drei Goroutinen los.

Wir können mit einem geschlossenen Channel noch einiges mehr anstellen. Denn sobald der Channel geschlossen wurde, meldet dieser den Nullwert. Wir können aber an diesem Wert nicht erkennen, ob er gesendet wurde oder aus einem geschlossenen Channel kommt. Deshalb liefert die Abfrage aus einem Channel einen zweiten Parameter vom Typ bool zurück. Wenn wir einen echten Wert geschickt bekommen, dann ist dieser Wert true.

func main() {

ch := make(chan int)

go func(c chan int) {

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

c <- i

}

close(c)

}(ch)

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

n, ok := <-ch

fmt.Println(n, ok)

}

}

// Output:

// 0 true

// 1 true

// 0 false

// 0 false



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.