如果您按 ctrl-c 退出应用程序,延迟的 Restore() 是否会运行?

Che*_*eam 4 go

在 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 */

}
Run Code Online (Sandbox Code Playgroud)

如果我在 Linux 中按 ctrl-C,它会运行延迟吗?还是立即退出?如果它立即退出,有办法解决吗?无论如何,在应用程序退出时运行代码的方法是什么?

Bur*_*dar 6

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
    }()
Run Code Online (Sandbox Code Playgroud)