Go语言关于协程何时退出的问题
- 启动一个新的协程时,协程的调用会立即返回。与函数不同,程序控制不会去等待 Go 协程执行完毕。在调用 Go 协程之后,程序控制会立即返回到代码的下一行,忽略该协程的任何返回值。
- 在程序启动时,Go程序就会为main()函数创建一个默认的goroutine
- 当main()函数返回的时候该goroutine就结束了,所有在main()函数中启动的goroutine会一同结束。因为main函数结束相当于程序结束
- 但是对于除main函数外的普通函数,如果在普通函数里启用了协程,那么该函数退出后协程并不会退出
总结
来源:go中父协程与子协程的生命周期
当父协程是main协程时,父协程退出,父协程下的所有子协程也会跟着退出;当父协程不是main协程时,父协程退出,父协程下的所有子协程并不会跟着退出(子协程直到自己的所有逻辑执行完或者是main协程结束才结束)