English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang Grundtutorials

Golang Kontrollanweisung

Golang Funktion & Methode

Golang Struktur

Golang Slice & Array

Golang String (String)

Golang Zeiger

Golang Schnittstelle

Golang Koncurrency

Fehler (Error) von Golang

Andere Artikel von Golang

Go Sprache Einbahnkanal

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

Umwandlung eines bidirektionalen Kanals in einen Einwegkanal

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.