English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Bekanntlich sind Kanäle das Kommunikationsmedium zwischen concurrently laufenden goroutine, daher können sie Daten aneinander senden und empfangen. Standardmäßig sind Kanäle bidirektional, aber Sie können auch Einwegkanäle erstellen. Ein Kanal, der nur Daten empfangen kann oder nur Daten senden kann, istEinwegkanal。Einwegkanäle können auch durch die Funktion make() erstellt werden, wie folgt:
//nur für Empfang von Daten c1:= make(<- chan bool) //nur für Senden von Daten c2:= make(chan<-bool)
Beispiel zur Verwendung von Einwegkanälen1:
package main import "fmt" func main() { //nur für Empfang von Daten mychanl1 := make(<-chan string) //nur für Senden von Daten mychanl2 := make(chan<- string) //Anzeige des Typs des Kanals fmt.Printf("%T", mychanl1) fmt.Printf("\n%T", mychanl2) }
Ausgabe:
<-chan string chan<- string
In der Programmiersprache Go ist es erlaubt, einen bidirektionalen Kanal in einen Einwegkanal umzuwandeln, mit anderen Worten, Sie können einen bidirektionalen Kanal in einen nur empfangenden oder nur sendenden Kanal umwandeln, aber umgekehrt auch.
package main import "fmt" func sending(s chan<- string) { s <- "w3codebox" } func main() { //Erstellung eines bidirektionalen Kanals mychanl := make(chan string) //Hierbei wird die Funktion sending() den bidirektionalen Kanal in einen Sendekanal umgewandelt go sending(mychanl) //Hierbei wird der Kanal nur innerhalb von goroutine gesendet und außerhalb von goroutine ist der Kanal bidirektional, daher wird w gedruckt3codebox fmt.Println(<-mychanl) }
Ausgabe:
w3codebox
Verwendung von Einwegkanälen:Ein Einwegkanal wird verwendet, um die Typsicherheit des Programms zu gewährleisten, wodurch weniger Fehler durch das Programm verursacht werden. Oder Sie können auch Einwegkanäle verwenden, um Kanäle zu erstellen, die nur Daten senden oder empfangen können.