Grundlagen von Kanälen (Channels)
Was ist ein Kanal (Channel)?
In Go ist ein Kanal (Channel) ein grundlegendes Kommunikationsmittel, das es Goroutinen ermöglicht, Daten sicher und synchron auszutauschen. Kanäle fungieren als typisierte Leitungen, über die Sie Werte senden und empfangen können, was konkurrierende Programmiermuster ermöglicht.
Deklaration und Initialisierung von Kanälen
Kanäle werden mit der Funktion make()
erstellt, wobei ein bestimmter Typ und optional eine Puffergröße angegeben werden:
// Unbuffered channel
ch1 := make(chan int)
// Buffered channel with capacity of 5
ch2 := make(chan string, 5)
Kanaltypen
Go unterstützt zwei primäre Kanaltypen:
Kanaltyp |
Beschreibung |
Verhalten |
Unbuffered (unpuffernd) |
Keine Kapazität |
Synchroner Datenaustausch |
Buffered (puffernd) |
Hat Kapazität |
Asynchroner Datenaustausch |
Grundlegende Kanaloperationen
Senden und Empfangen
// Sending a value
ch <- value
// Receiving a value
value := <-ch
Visualisierung des Kanalflusses
graph LR
A[Goroutine 1] -->|Send| C{Channel}
B[Goroutine 2] -->|Receive| C
Kanalrichtung
Go ermöglicht die Angabe der Kanalrichtung für eine verbesserte Typsicherheit:
// Send-only channel
var sendOnly chan<- int
// Receive-only channel
var receiveOnly <-chan int
Praktisches Beispiel
package main
import "fmt"
func main() {
messages := make(chan string)
go func() {
messages <- "Hello, LabEx!"
}()
msg := <-messages
fmt.Println(msg)
}
Dieses Beispiel zeigt die grundlegende Kommunikation zwischen Goroutinen über einen Kanal.