runtime.goexit()退出所在协程
func exit() {
defer fmt.Println("BBBBBBBBBB")//在函数退出前执行
runtime.Goexit()//退出所在子协程
fmt.Println("CCCCCCCCCCC")
}
func main() {
go func() {
fmt.Println("AAAAAAAAAAAA")
exit()
fmt.Println("DDDDDDDDDDDDD")
}()
go func() {
fmt.Println("zzzzzzzzzzzzz")
}()
time.Sleep(time.Second*2)
fmt.Println("EEEEEEEEEEEEE")
}
执行结果:
AAAAAAAAAAAA
BBBBBBBBBB
zzzzzzzzzzzzz
EEEEEEEEEEEEE
runtime.Goexit()的作用是退出当前所在的协程,所以并不会影响第二个goroutine,进入goexit函数后进行协程资源回收等处理工作