Bienvenidos a la primera edición de "no hay pregunta estúpida", soy su anfitrión, Kaledros.
Abro este hilo para que a nadie le dé palo preguntar algo que no entiende y que cree que es una pregunta estúpida o que a estas alturas debería entenderlo por sí mismo. Nadie nace aprendido y hay cosas que cuestan más de entender que otras. La única regla de este hilo es no ser un imbécil. Esto no es feda, no saquemos los pies del tiesto y seamos amables, puede que mañana seamos nosotros quienes preguntemos algo aquí.
Empiezo yo, que para eso abro el hilo: ¿para qué se usan los canales direccionales en Go en la práctica? Entiendo como funcionan, entiendo lo que no se debe hacer y lo que sí, pero no se me ocurre un solo caso de uso ahora mismo, supongo que porque nunca he tenido la necesidad de usar nada parecido. ¿Por qué iba a querer yo un canal donde sólo puedo escribir y me da un panic al leerlo?
Es decir, esto:
package main
import "fmt"
func something() <-chan int {
c := make(chan int)
go func() {
defer close(c)
c <- 123
}()
return c
}
func main() {
fmt.Println(<-something())
}
Dentro de something()
se crea un canal normal pero como lo castea según el return de la función lo que se obtiene al invocarla es un canal de sólo lectura. Imagino que esto lo que consigue es una especie de inmutabilidad porque cuando devuelve el canal no puedes escribir en él sin que te suelte un panic al castearlo.
¿Es esto correcto? ¿Los canales readonly se usan para algo más? ¿Para qué se usa entonces un canal writeonly?