É 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
No answers yet.
Faça login para deixar uma resposta