¿Cómo detener correctamente una goroutine en Go? Problemas con la finalización de tareas en segundo plano
¡Hola a todos! Soy un desarrollador Go principiante y tengo un problema con la gestión de goroutines. Estoy escribiendo un pequeño servicio que verifica periódicamente el estado de una API externa y actualiza un caché local. Para ello, ejecuto una goroutine en segundo plano con un bucle infinito y time.Sleep.
El problema es que al finalizar el programa (por ejemplo, con Ctrl+C) o al necesitar reiniciar la goroutine, no puedo detenerla correctamente. Si simplemente finalizo main, la goroutine sigue colgada o entra en pánico. Intenté usar un flag global `var running bool` y verificarlo en el bucle, pero esto no funciona instantáneamente y, a veces, la goroutine se bloquea en operaciones de entrada/salida.
Aquí hay un ejemplo de mi código:
```go
package main
import (
"fmt"
"time"
)
func worker() {
for {
fmt.Println("Working...")
// Aquí puede haber una solicitud larga a la API
time.Sleep(2 * time.Second)
}
}
func main() {
go worker()
time.Sleep(5 * time.Second)
// ¿Cómo detener worker?
fmt.Printl