Avatar ·

Cómo interceptar Ctrl+C (SIGINT) y realizar la limpieza de recursos en Go, como con defer?

¡Hola a todos! Estoy escribiendo una aplicación de servidor en Go que abre conexiones TCP, trabaja con archivos y base de datos. Necesito que al presionar Ctrl+C (señal SIGINT) el programa termine correctamente: cierre conexiones, guarde datos, libere recursos. Conozco `defer` — funciona muy bien en la finalización normal de una función. Pero cuando presiono Ctrl+C, el programa simplemente se mata y `defer` no se ejecuta. Por ejemplo: ```go func main() { db, _ := sql.Open("postgres", "...") defer db.Close() // algún bucle infinito for { // trabajamos } } ``` Al presionar Ctrl+C, `defer db.Close()` no se ejecuta. Leí sobre el paquete `os/signal`, pero no entiendo cómo organizar correctamente un comportamiento "similar a defer". ¿Cómo hacer que, ante cualquier finalización (normal o por señal), se ejecute garantizadamente una función de limpieza? Necesito un ejemplo con graceful shutdown. <<>>

Problema: defer no se ejecuta con señales del SO

Tú