¿Se puede dejar un canal abierto en Go? Consecuencias y buenas prácticas
¡Hola a todos! Acabo de empezar a aprender Go y estoy escribiendo un pequeño servicio para procesar tareas. Tengo una goroutine worker que lee de un canal y procesa los mensajes. Noté que si la función main termina pero el canal permanece abierto, el programa no falla, simplemente finaliza silenciosamente. Pero no estoy seguro de si esto es normal.
Aquí hay un ejemplo simplificado de lo que hago:
```go
package main
import "fmt"
func worker(tasks <-chan int) {
for task := range tasks {
fmt.Println("Tarea procesada:", task)
}
}
func main() {
tasks := make(chan int)
go worker(tasks)
tasks <- 1
tasks <- 2
tasks <- 3
// No cierro el canal y el programa termina.
// ¿Es normal hacer esto?
}
```
He leído que en Go el garbage collector no cierra los canales y que deben cerrarse explícitamente. Pero en mi ejemplo el programa funciona y termina sin errores. Cuando agrego `close(tasks)`, la goroutine worker finaliza inmediatamente después de procesar el último elemento.