如何在Go中拦截Ctrl+C(SIGINT)并像defer一样执行资源清理
大家好!我正在用Go编写一个服务器应用程序,它打开TCP连接、处理文件和数据库。我需要确保在按下Ctrl+C(SIGINT信号)时,程序能够正确退出:关闭连接、保存数据、释放资源。
我知道`defer`——它在函数正常退出时工作得很好。但当我按下Ctrl+C时,程序直接被杀死,`defer`不会执行。例如:
```go
func main() {
db, _ := sql.Open("postgres", "...")
defer db.Close()
// 某个无限循环
for {
// 工作
}
}
```
按下Ctrl+C时,`defer db.Close()`不会执行。我读过`os/signal`包,但不知道如何正确组织“类似defer”的行为。如何确保在任何退出(正常或信号)时都能保证执行清理函数?需要一个graceful shutdown的例子。
<<>>
问题:defer在OS信号下不执行
您