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ú