English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Il est connu que les passages sont des媒s de communication entre des goroutines exécutées en concurrence, par conséquent, ils peuvent envoyer et recevoir des données les uns aux autres. Par défaut, les passages sont bidirectionnels, mais vous pouvez également créer des passages unidirectionnels. Un passage qui ne peut recevoir que des données ou qui ne peut envoyer que des données estPassage unidirectionnel。Le passage unidirectionnel peut également être créé via la fonction make(), comme suit :
//Recevoir uniquement des données c1:= make(<- chan bool) //Utilisé uniquement pour envoyer des données c2:= make(chan<-bool)
Exemple d'utilisation du passage unidirectionnel1:
package main import "fmt" func main() { //Utilisé uniquement pour recevoir des données mychanl1 := make(<-chan string) //Utilisé uniquement pour envoyer des données mychanl2 := make(chan<- string) //Affichage du type du passage fmt.Printf("%T", mychanl1) fmt.Printf("\n%T", mychanl2) }
Sortie :
<-chan string chan<- string
En langage Go, il est permis de convertir un passage bidirectionnel en passage unidirectionnel, autrement dit, vous pouvez convertir un passage bidirectionnel en passage uniquement pour recevoir ou uniquement pour envoyer des données, mais l'inverse est également possible. Voici l'exemple suivant du programme :
package main import "fmt" func sending(s chan<- string) { s <- "w3codebox" } func main() { //Création d'un passage bidirectionnel mychanl := make(chan string) //Dans ce cas, la fonction sending() convertit le passage bidirectionnel en passage unidirectionnel go sending(mychanl) //Dans ce cas, le passage est uniquement utilisé pour envoyer des données dans la goroutine, tandis que hors de la goroutine, le passage est bidirectionnel, donc il imprime w3codebox fmt.Println(<-mychanl) }
Sortie :
w3codebox
Utilisation du passage unidirectionnel :Le passage unidirectionnel est utilisé pour fournir la sécurité de type du programme, ce qui réduit le nombre d'erreurs générées par le programme. Ou, vous pouvez également utiliser le passage unidirectionnel pour créer un passage qui ne peut envoyer ou recevoir des données.