package main
import (
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
wg.Add(1)
go func() { //A
wg.Wait()
println("wait exit")
}()
go func() {
time.Sleep(time.Second)
wg.Done()
}()
wg.Wait()
println("main exit")
}
结果:
wait exit
main exit
为什么主要的goroutine首先执行println("主要退出"),主线程死了然后丢弃一个goroutine? 它像结果一样保持打印
答案 0 :(得分:2)
可能。
语言规范中没有任何内容表明您的等待退出"应该在"主要退出"之前或之后执行。
如果你运行程序足够多次,有时可能会出现#34;主要退出"将首先运行。但也许不是。结果未定义,并且取决于运行时状态和实现。因此,这些结果甚至可能会在Go版本之间发生变化。