Avatar ·

Kann man das Signal Ctrl+C (SIGINT) abfangen und eine Aufräumfunktion wie bei defer ausführen?

Hallo zusammen! Ich schreibe einen kleinen HTTP-Server in Go, der Anfragen verarbeitet und Daten in einer Datei speichert. Wenn ich den Server starte und Ctrl+C drücke, wird das Programm sofort beendet und die Datei mit den Daten bleibt in einem unvollständigen Zustand. Ich möchte, dass beim Empfang von SIGINT (Ctrl+C) zuerst eine Aufräumfunktion ausgeführt wird (z.B. Daten auf die Festplatte flushen und Dateien schließen), und erst dann das Programm beendet wird. Ich kenne `defer` – es funktioniert hervorragend, wenn die Funktion normal oder über `return` beendet wird. Aber wenn ich Ctrl+C drücke, wird `defer` nicht ausgeführt, weil das Programm einfach durch das Signal getötet wird. Kann man dieses Signal irgendwie abfangen und eine Cleanup-Logik im Stil von `defer` ausführen? Um keine Krücken mit manuellen Flag-Überprüfungen schreiben zu müssen. Hier ist ein Beispiel meines Codes: ```go package main import ( "fmt" "log" "net/http" "os" "os/signal" "syscall" ) func main() { // Datei für Logs öffnen f, _ := os.Create("server.log") defer f.Close() http