Sobes.tech
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