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