English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Conhecido que os canais são o meio de comunicação entre goroutines executando em paralelo, portanto, podem se enviar e receber dados um ao outro. Pelo padrão, os canais são bidirecionais, mas você também pode criar canais unidirecionais. Canais que podem apenas receber dados ou apenas enviar dados sãoCanal unidirecional。O canal unidirecional também pode ser criado usando a função make(), conforme mostrado a seguir:
//Apenas para recebimento de dados c1:= make(<- chan bool) //Apenas para envio de dados c2:= make(chan<-bool)
Exemplo de uso do canal unidirecional1:
package main import "fmt" func main() { //Apenas para recebimento de dados mychanl1 := make(<-chan string) //Apenas para envio de dados mychanl2 := make(chan<- string) //Exibir o tipo do canal fmt.Printf("%T", mychanl1) fmt.Printf("\n%T", mychanl2) }
Saída:
<-chan string chan<- string
No idioma Go, é permitido converter um canal bidirecional em um canal unidirecional, em outras palavras, você pode converter um canal bidirecional em um canal de recebimento apenas ou envio apenas, mas também ao contrário. Como mostrado no seguinte programa:
package main import "fmt" func sending(s chan<- string) { s <- "w3codebox" } func main() { //Criar canal bidirecional mychanl := make(chan string) //Aqui, a função sending() converte o canal bidirecional em um canal de envio apenas go sending(mychanl) //Aqui, o canal é usado apenas para envio dentro de goroutine, enquanto fora da goroutine, o canal é bidirecional, então ele imprime w3codebox fmt.Println(<-mychanl) }
Saída:
w3codebox
Uso do canal unidirecional:O canal unidirecional é usado para fornecer segurança de tipo de programa, o que resulta em menos erros gerados pelo programa. Ou, quando você deseja criar um canal que pode apenas enviar ou receber dados, também pode usar o canal unidirecional.