采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
子协程panic之后,为什么如果不用sleep函数连“出错了“都不报就终止了?如果直接终止程序的话那为什么加上sleep还能继续执行?
你贴一下完整的代码我运行试试
func f1() defer func { err := recover() if err != nil { fmt.Println("捕获到了") } }() go func() { panic("出错了") }() time.Sleep(10*time.Second) } func main() { f1() } 我想问的是,在没有time.Sleep的情况下既然子协程panic会直接杀死主线程,连子协程panic里的“出错了”这一步都不打印就直接挂掉over了。凭什么加上sleep之后,sleep这行代码还能执行而不是直接挂掉?。是因为即使子协程panic之后依然要跑完主线程main的程序然后再带着子协程一起挂掉吗?主线程的程序优先级那么高吗?比panic还要高?
不是sleep的问题。你panic的代码recover之后 f1就正常退出了,代码都完结了,当然主线程也就退出了?和sleep没有关系
登录后可查看更多问答,登录/注册
快速转型Go工程师,成为具备双语言后端能力的开发者
988 1
1.3k 1
1.9k 20
1.4k 11
1.4k 10
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号