当我运行以下代码时没有错误,但也没有打印任何内容:package mainimport "fmt"func fibonacci(c, quit chan int) { x, y := 0, 1 counter := 0 for { select { case c <- x: fmt.Println("sent x", x) x, y = y, x+y case <-quit: fmt.Println("quit") return } counter += 1 fmt.Println("Counter", (counter)); } fmt.Println("Fib exiting");}func main() { c := make(chan int) quit := make(chan int) go func() { for i := 0; i < 10; i++ { fmt.Println("got" , <-c) } quit <- 0 fmt.Println("Anon exiting"); }() go fibonacci(c, quit)}我在想至少应该打印出来。如果我在主歌唱中正常执行,它就会起作用。"Fib exiting"fibonacci()提前致谢...
1 回答

qq_笑_17
TA贡献1818条经验 获得超7个赞
难道不能保证所有语句都在一个 goroutine 中执行吗?
应根据程序控制流执行的所有语句都将执行。
您的打印调用不会执行,因为在生成两个 goroutine 后立即返回。fmt.Println("Fib exiting")
main()
然而,即使正确同步,仍然是无法访问的代码,因为中的语句要么发送 on 要么接收 on ,并且这两种情况都没有脱离循环。main()
fmt.Println("Fib exiting")
select
fibonacci()
c
quit
- 1 回答
- 0 关注
- 70 浏览
添加回答
举报
0/150
提交
取消