Wie man Ctrl+C (SIGINT) abfängt und Ressourcenbereinigung in Go wie mit defer durchführt
Hallo zusammen! Ich schreibe eine Serveranwendung in Go, die TCP-Verbindungen öffnet, mit Dateien und einer Datenbank arbeitet. Ich brauche, dass das Programm bei Drücken von Ctrl+C (Signal SIGINT) ordnungsgemäß beendet wird: Verbindungen schließt, Daten speichert, Ressourcen freigibt.
Ich kenne `defer` – es funktioniert hervorragend bei normalem Funktionsabschluss. Aber wenn ich Ctrl+C drücke, wird das Programm einfach gekillt, und `defer` wird nicht ausgeführt. Zum Beispiel:
```go
func main() {
db, _ := sql.Open("postgres", "...")
defer db.Close()
// eine Art Endlosschleife
for {
// arbeiten
}
}
```
Beim Drücken von Ctrl+C wird `defer db.Close()` nicht ausgeführt. Ich habe über das Paket `os/signal` gelesen, verstehe aber nicht, wie man ein "defer-ähnliches" Verhalten richtig organisiert. Wie kann ich sicherstellen, dass bei jeder Beendigung (normal oder durch Signal) garantiert eine Bereinigungsfunktion ausgeführt wird? Ich brauche ein Beispiel mit graceful shutdown.
<<>>
Problem: defer wird bei OS-Signalen nicht ausgeführt
Sie