【发布时间】:2020-10-25 03:50:17
【问题描述】:
为什么子goroutine可以在main goroutine终止后运行?
这里是代码
package main
import (
"fmt"
"log"
"time"
)
func main() {
ch := make(chan int)
log.Println("===========")
go func() {
log.Println("doing in sub goroutine")
ch <- 1
log.Println("done in sub goroutine")
}()
// mock slowly proceedings
time.Sleep(1 * time.Second)
log.Println("doing in main goroutine")
fmt.Println("x in ch is:", <-ch)
log.Println("done in main goroutine")
// output:
// 2020/07/04 16:26:35 doing in sub goroutine
// 2020/07/04 16:26:36 doing in main goroutine
// x in ch is: 1
// 2020/07/04 16:26:36 done in main goroutine
// 2020/07/04 16:26:36 done in sub goroutine (should not be output)
}
当 subgoroutine 可以在 main goroutine 终端之后运行时,以下输出很奇怪?
// 2020/07/04 16:26:36 在主 goroutine 中完成
// 2020/07/04 16:26:36 done in sub goroutine (不应该输出)
【问题讨论】:
标签: go debugging concurrency channel