社区
其他技术讨论专区
帖子详情
手动停止,defer不执行
weixin_38049686
2019-09-20 10:19:21
我想在停止服务前注销eureka注册信息,然后发现在goland中手动中断程序,defer并不会执行
我想问一下这是golang本身设计问题吗?为什么java手动中断依然可以执行后续处理方法
...全文
114
2
打赏
收藏
手动停止,defer不执行
我想在停止服务前注销eureka注册信息,然后发现在goland中手动中断程序,defer并不会执行 我想问一下这是golang本身设计问题吗?为什么java手动中断依然可以执行后续处理方法
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
weixin_38051598
2019-09-20
打赏
举报
回复
因为手动执行`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") } ```
weixin_38055275
2019-09-20
打赏
举报
回复
感谢,只是这样就不能在主线程监听http服务,必须另起线程,主线程就浪费了
Go语言面试八股文大全
Go语言面试八股文大全
RxJava.PDF
详细介绍 RxJava,有图例解析,易懂。
Rx 中文文档
Rx 中文文档
golang的
def
er
的理解-
def
er
的函数一定会
执行
吗?
go语言中
def
er
可以完成延迟功能,当前函数
执行
完成后再
执行
def
er
的代码块。通过
def
er
,我们可以在代码中优雅的关闭/清理代码中所使用的变量。
Go-知识
def
er
def
er
语句用于延迟函数的调用,常用于关闭文件描述符、释放锁等资源释放场景。
def
er
语句采用后进先出的设计,类似于栈的方式,函数
执行
时,每遇到一个
def
er
都会把一个函数压入栈中,函数返回前在将函数从栈中取出
执行
,最早被压入栈中的函数最晚被
执行
。不仅函数正常返回会
执行
被
def
er
延迟的函数,函数中任意一个return语句、panic语句均会触发延迟函数。
def
er
定义的延迟函数参数在
def
er
语句出现时就已经确定了
def
er
定义的顺序与实际的
执行
顺序相反。
其他技术讨论专区
473
社区成员
791,201
社区内容
发帖
与我相关
我的任务
其他技术讨论专区
其他技术讨论专区
复制链接
扫一扫
分享
社区描述
其他技术讨论专区
其他
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章