Junior — Middle
Wie organisiert man die Interaktion und Datenübertragung über Kanäle im System?
sobes.tech KI
Antwort von AI
In Go wird die Interaktion zwischen Goroutines häufig über Kanäle (channels) organisiert – typisierte Pipelines für die Datenübertragung.
Zur Datenübertragung wird ein Kanal mit make(chan Typ) erstellt. Goroutines können Daten in den Kanal mit dem Operator <- senden und auch Daten aus dem Kanal mit demselben Operator empfangen, was die Synchronisation gewährleistet.
Beispiel:
package main
import (
"fmt"
"time"
)
func producer(ch chan<- int) {
for i := 0; i < 5; i++ {
ch <- i // Daten senden
time.Sleep(time.Millisecond * 500)
}
close(ch) // Kanal schließen, um das Ende anzuzeigen
}
func consumer(ch <-chan int) {
for val := range ch { // Daten aus dem Kanal empfangen
fmt.Println("Empfangen:", val)
}
}
func main() {
ch := make(chan int)
go producer(ch)
consumer(ch)
}
Auf diese Weise ermöglichen Kanäle eine sichere und effiziente Datenübertragung zwischen Goroutines, wobei Race Conditions und Blockierungen vermieden werden.