为了解决我对 goroutines 的一些误解,我去了 Go 游乐场并运行了以下代码:
package main
import (
"fmt"
)
func other(done chan bool) {
done <- true
go func() {
for {
fmt.Println("Here")
}
}()
}
func main() {
fmt.Println("Hello, playground")
done := make(chan bool)
go other(done)
<-done
fmt.Println("Finished.")
}
正如我所预料的,Go playground 返回一个错误:进程花了太长时间。
这似乎意味着在其中创建的 goroutineother将永远运行。
但是当我在自己的机器上运行相同的代码时,我几乎立即得到了这个输出:
Hello, playground.
Finished.
这似乎意味着other当主 goroutine 完成时,里面的 goroutine 就退出了。这是真的?还是主协程完成,而另一个协程继续在后台运行?
largeQ
拉风的咖菲猫
相关分类