Avatar ·

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