Avatar ·

É possível interceptar o sinal Ctrl+C (SIGINT) e executar uma função de limpeza, como no defer?

Olá a todos! Estou escrevendo um pequeno servidor HTTP em Go que processa requisições e salva dados em um arquivo. Quando inicio o servidor e pressiono Ctrl+C, o programa termina instantaneamente e o arquivo com dados fica em um estado incompleto. Eu quero que, ao receber SIGINT (Ctrl+C), primeiro execute uma função de limpeza (por exemplo, flush dos dados para o disco e fechamento dos arquivos), e só então o programa termine. Eu conheço o `defer` — ele funciona perfeitamente quando a função termina normalmente ou via `return`. Mas se eu pressiono Ctrl+C, o `defer` não é executado, porque o programa é simplesmente morto pelo sinal. É possível de alguma forma interceptar esse sinal e executar a lógica de cleanup no estilo do `defer`? Para não precisar escrever gambiarras com verificação manual de flags. Aqui está um exemplo do meu código: ```go package main import ( "fmt" "log" "net/http" "os" "os/signal" "syscall" ) func main() { // Abrindo arquivo para logs f, _ := os.Create("server.log") defer f.Close() http