Middle
¿Qué es un canal en Go? ¿Qué tipos de canales existen? ¿En qué se diferencian los canales con búfer y sin búfer?
sobes.tech AI
Respuesta de la IA
Un canal en Go es un tipo de dato que se utiliza para transmitir valores entre goroutines, asegurando la sincronización y el intercambio de datos.
Tipos de canales:
- Canales sin búfer — no tienen búfer interno, y el envío se bloquea hasta que el receptor lea el valor.
- Canales con búfer — tienen un búfer interno de tamaño fijo, y el envío solo se bloquea si el búfer está lleno.
Diferencias:
- En los canales sin búfer, el emisor y el receptor deben estar listos al mismo tiempo para enviar/recibir, lo que garantiza una sincronización estricta.
- En los canales con búfer, el emisor puede colocar varios valores en el búfer sin esperar al receptor, hasta que el búfer se llene.
Ejemplo de creación y uso de un canal con búfer:
ch := make(chan int, 2) // búfer de 2 elementos
ch <- 1
ch <- 2
// ch <- 3 // se bloquea hasta que haya espacio libre
fmt.Println(<-ch) // 1
fmt.Println(<-ch) // 2