1. 首页
  2. 主题
  3. Go问与答

手动停止,defer不执行

windy_ · · 1796 次点击
我想在停止服务前注销eureka注册信息,然后发现在goland中手动中断程序,defer并不会执行 我想问一下这是golang本身设计问题吗?为什么java手动中断依然可以执行后续处理方法 ![1548040447265.jpg](https://static.studygolang.com/190121/a37f945ffba65d68b38fbec20e7e6e84.jpg)
windy_
君子知命不惧,日日自省
感谢,只是这样就不能在主线程监听http服务,必须另起线程,主线程就浪费了
#2
更多评论
因为手动执行`Ctrl + C`相当于给程序发了个`kill`信号,进程就直接退出了,可以参考下面代码优雅的退出go进程 ```go import ( "fmt" "os" "os/signal" ) func main() { c := make(chan os.Signal) signal.Notify(c) defer func() { fmt.Println("defer...") }() fmt.Println("main 1") //time.Sleep(time.Hour) <-c fmt.Println("main 2") } ```
#1

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中