Avatar ·

Est-il possible d'intercepter le signal Ctrl+C (SIGINT) et d'exécuter une fonction de nettoyage, comme avec defer ?

Bonjour à tous ! J'écris un petit serveur HTTP en Go qui traite les requêtes et sauvegarde les données dans un fichier. Lorsque je lance le serveur et que j'appuie sur Ctrl+C, le programme se termine instantanément et le fichier de données reste dans un état incomplet. Je souhaite qu'à la réception de SIGINT (Ctrl+C), une fonction de nettoyage soit d'abord exécutée (par exemple, flush des données sur le disque et fermeture des fichiers), puis seulement ensuite le programme se termine. Je connais `defer` — il fonctionne parfaitement lorsque la fonction se termine normalement ou via `return`. Mais si j'appuie sur Ctrl+C, `defer` ne s'exécute pas, car le programme est simplement tué par le signal. Est-il possible d'intercepter ce signal et d'exécuter une logique de nettoyage dans le style de `defer` ? Pour éviter d'écrire des bricolages avec des vérifications manuelles de flags. Voici un exemple de mon code : ```go package main import ( "fmt" "log" "net/http" "os" "os/signal" "syscall" ) func main() { // Ouvrir un fichier pour les logs f, _ := os.Create("server.log") defer f.Close() http