Avatar ·

Como interceptar Ctrl+C (SIGINT) e executar limpeza de recursos em Go, como com defer?

Olá a todos! Estou escrevendo uma aplicação servidor em Go que abre conexões TCP, trabalha com arquivos e banco de dados. Preciso que ao pressionar Ctrl+C (sinal SIGINT) o programa finalize corretamente: feche conexões, salve dados, libere recursos.\n\nEu conheço o `defer` — ele funciona perfeitamente na finalização normal da função. Mas quando pressiono Ctrl+C, o programa simplesmente é morto, e o `defer` não é executado. Por exemplo:\n\n```go\nfunc main() {\n db, _ := sql.Open("postgres", "...")\n defer db.Close()\n\n // algum loop infinito\n for {\n // trabalhando\n }\n}\n```\n\nAo pressionar Ctrl+C o `defer db.Close()` não é executado. Eu li sobre o pacote `os/signal`, mas não entendo como organizar corretamente um comportamento "similar ao defer". Como fazer para que, em qualquer