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

Tutorial básico do Golang

Controles de语句 do Golang

Funções & Métodos do Golang

Estruturas do Golang

Fatias & Arrays do Golang

Strings do Golang

Ponteiros do Golang

Interfaces do Golang

Concorrência do Golang

Exceções do Golang

Outros itens do Golang

Canal Unidirecional do Linguagem Go

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

Converter canal bidirecional para unidirecional

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.