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