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

Tutoriales básicos de Golang

Sentencias de control de Golang

Funciones y métodos de Golang

Estructuras de Golang

Cortes y arreglos de Golang

Cadenas de Golang

Punteros de Golang

Interfaces de Golang

Concurrencia de Golang

Excepciones de Golang

Misceláneos de Golang

Canal unidireccional del lenguaje Go

Es bien conocido que los canales son el medio de comunicación entre goroutines que ejecutan de manera concurrente, por lo que pueden enviarse y recibir datos entre sí. Por defecto, los canales son bidireccionales, pero también se puede crear un canal unidireccional. Un canal que solo puede recibir datos o solo puede enviar datos esCanal unidireccional。El canal unidireccional también se puede crear a través de la función make(), como se muestra a continuación:

//Solo para recibir datos
c1:= make(<- chan bool)
//Solo para enviar datos
c2:= make(chan<-bool)

Ejemplo de uso del canal unidireccional1:

package main 
  
import "fmt"
  
func main() { 
  
    //Solo para recibir datos
    mychanl1 := make(<-chan string) 
  
    //Solo para enviar datos
    mychanl2 := make(chan<- string) 
  
    //Mostrar el tipo de canal 
    fmt.Printf("%T", mychanl1) 
    fmt.Printf("\n%T", mychanl2) 
}

Salida:

<-chan string
chan<- string

Convertir un canal bidireccional en un canal unidireccional

En el lenguaje Go, se permite convertir un canal bidireccional en un canal unidireccional, es decir, puede convertir un canal bidireccional en un canal solo de recepción o solo de envío, pero también a la inversa. Como muestra el siguiente programa:

package main 
  
import "fmt"
  
func sending(s chan<- string) { 
    s <- "w3codebox"
} 
  
func main() { 
  
    //Crear un canal bidireccional
    mychanl := make(chan string) 
  
        //Aquí, la función sending() convierte el canal bidireccional en un canal solo de envío 
    go sending(mychanl) 
  
    //Aquí, el canal solo se envía dentro de la goroutine, mientras que fuera de la goroutine, el canal es bidireccional, por lo que imprime w3codebox 
    fmt.Println(<-mychanl) 
}

Salida:

w3codebox

Uso del canal unidireccional:El canal unidireccional se utiliza para proporcionar seguridad de tipo de programa, lo que hace que los errores generados por el programa sean menos. O, cuando desee crear un canal que solo pueda enviar o recibir datos, también se puede usar un canal unidireccional.