Avatar ·

¿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