Junior — Middle
¿Cómo determinar cuál de las goroutines terminará con el canal?
sobes.tech AI
Respuesta de la IA
En Go, no se puede determinar directamente qué goroutine cerró un canal, ya que los canales no contienen información sobre quién los cierra. Sin embargo, generalmente se utiliza un acuerdo:
- La goroutine que escribe en el canal es responsable de cerrarlo.
- Las goroutines que leen reciben una señal de cierre a través del segundo valor al leer:
value, ok := <-ch. Siok == false, el canal está cerrado.
Para saber qué goroutine cerró el canal, se pueden usar mecanismos adicionales, como enviar mensajes estructurados con identificadores a través del canal, o usar canales de señal separados o contextos (context.Context) para la coordinación.
Ejemplo:
ch := make(chan int)
// Goroutine que escribe y cierra el canal
go func() {
defer close(ch)
ch <- 1
}()
// Goroutine que lee
go func() {
for v := range ch {
fmt.Println(v)
}
fmt.Println("Canal cerrado")
}()
En este ejemplo, la primera goroutine cierra el canal. Para saber explícitamente quién cerró el canal, se puede agregar registro o usar canales adicionales para señales.