在Go中,您有类似于的东西
func main() {
defer func() {
if r := recover(); r != nil {
/*run some clean up code here...*/
fmt.Println("Recovered")
}
}()
/*Some code right here like a web server that runs until panic or ctrl-c'd out */
}
如果我在Linux中使用ctrl-C,它会运行defer吗?或者它会立即退出?如果它立即退出,有办法绕过吗?一种在应用程序退出时运行代码的方法,不管怎样?
Ctrl-C或其他信号将终止程序,而不调用延迟函数。您可以使用信号处理程序捕获ctrl-c。阅读os/signal包的文档,它具有特定于操作系统的行为。下面这样的东西会抓住ctrl-c:
c := make(chan os.Signal, 1)
signal.Notify(c,os.Interrupt)
go func() {
s := <-c
// signal caught, cleanup
}()