ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 主协程退出,子协程也跟着挂 ~~~ func main() { go func() { i := 0 for { i++ fmt.Println("子 i = ", i) time.Sleep(time.Second) } }() //别忘记() i := 0 for { i++ fmt.Println("main i = ", i) time.Sleep(time.Second) if i == 2 { break } } } ~~~ # 子协程退出 ~~~ import ( "runtime" "sync" ) func main() { wg := new(sync.WaitGroup) wg.Add(1) go func() { defer wg.Done() defer println("A.defer") func() { defer println("B.defer") runtime.Goexit() // 终止当前 goroutine println("B") // 不会执行 }() println("A") // 不会执行 }() wg.Wait() } ~~~ 输出结果: ~~~ B.defer A.defer ~~~