关于go在函数退出后子协程的退出问题
该问题来源于自己在读fabric源码时,看到的一个测试代码,在一个函数中启用协程,然后该函数退出了,由于平常没有这样处理过,以及受原有c++函数域的影响,认为函数退出,子协程应该也退出了呀。
这其实是自己对go协程的理解不到位引起的,go的协程作用域不是在某个函数中的,当然,如果那个函数是main函数,就符合要求了。
该代码为solo算法的测试代码:
func goWithWait(target func()) *waitableGo {
wg := &waitableGo{
done: make(chan struct{
}),
}
go func() {
target()//该协程会阻塞在这
close(wg.done)//用来对外通知
}()
//外边结束,里边还不结束吗?
return wg
}
// This test checks that if consenter is halted before a timer fires, nothing is actually written.
func TestHaltBeforeTimeout