English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Noto a tutti, i canali sono il mezzo di comunicazione tra i goroutine che eseguono in modo concorrente, quindi possono inviarsi e riceversi dati. Di default, i canali sono bidirezionali, ma è anche possibile creare canali unidirezionali. I canali che possono solo ricevere dati o solo inviare dati sonoCanale unidirezionale.I canali unidirezionali possono anche essere creati tramite la funzione make(), come mostrato di seguito:
//Utilizzato solo per ricevere dati c1 := make(<- chan bool) //Utilizzato solo per inviare dati c2 := make(chan<- bool)
Esempio di utilizzo del canale unidirezionale 1:
package main import "fmt" func main() { //Utilizzato solo per ricevere dati mychanl1 := make(<-chan string) //Utilizzato solo per inviare dati mychanl2 := make(chan<- string) //Mostra il tipo del canale fmt.Printf("%T", mychanl1) fmt.Printf("\n%T", mychanl2) }
Output:
<-chan string chan<- string
In Go, è possibile convertire un canale bidirezionale in un canale unidirezionale,换句话说,puoi convertire un canale bidirezionale in un canale che può solo ricevere o solo inviare, ma anche al contrario. Come mostrato nel seguente programma:
package main import "fmt" func sending(s chan<- string) { s <- "w3codebox" } func main() { //Creazione di un canale bidirezionale mychanl := make(chan string) //In questo caso, la funzione sending() trasforma il canale bidirezionale in un canale unidirezionale go sending(mychanl) //In questo caso, il canale è inviato solo all'interno del goroutine, mentre all'esterno del goroutine il canale è bidirezionale, quindi stampa w3codebox fmt.Println(<-mychanl) }
Output:
w3codebox
Uso del canale unidirezionale:Il canale unidirezionale viene utilizzato per fornire la sicurezza del tipo del programma, riducendo così il numero di errori generati dal programma. Oppure, quando si desidera creare un canale che può solo inviare o ricevere dati, si può anche utilizzare un canale unidirezionale.