Looking for go Keywords? Try Ask4Keywords

GoChannels


Einführung

Ein Kanal enthält Werte eines bestimmten Typs. Werte können in einen Kanal geschrieben und von diesem gelesen werden, und sie zirkulieren innerhalb des Kanals in der Reihenfolge des ersten Durchlaufs. Es wird unterschieden zwischen gepufferten Kanälen, die mehrere Meldungen enthalten können, und ungepufferten Kanälen, die dies nicht können. Kanäle werden normalerweise zur Kommunikation zwischen Goroutinen verwendet, sind aber auch in anderen Situationen nützlich.

Syntax

  • make (chan int) // einen ungepufferten Kanal erstellen
  • make (chan int, 5) // einen gepufferten Kanal mit einer Kapazität von 5 erstellen
  • close (ch) // schließt einen Kanal "ch"
  • ch <- 1 // Schreibe den Wert von 1 in einen Kanal "ch"
  • val: = <-ch // lese einen Wert aus Kanal "ch"
  • val, ok: = <-ch // alternative Syntax; ok ist ein Bool, der anzeigt, ob der Kanal geschlossen ist

Bemerkungen

Ein Kanal, der die leere struct make(chan struct{}) ist eine klare Nachricht an den Benutzer, dass keine Informationen über den Kanal übertragen werden und dass diese ausschließlich zur Synchronisation verwendet werden.

Bei ungepufferten Kanälen wird ein Kanalschreiben blockiert, bis ein entsprechender Lesevorgang von einer anderen Goroutine erfolgt. Dasselbe gilt für das Blockieren eines Kanals, während auf einen Brenner gewartet wird.

Channels Verwandte Beispiele