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

Tutoriel de base Golang

Instructions de contrôle Golang

Fonctions et méthodes Golang

Structures Golang

Coupes et tableaux Golang

Chaînes Golang

Pointeurs Golang

Interfaces Golang

Concurrence Golang

Erreurs Golang

Autres éléments Golang

Channel unidirectionnel du langage Go

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

Conversion d'un passage bidirectionnel en passage unidirectionnel

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.