我是Go的新手.当我评论第二个goroutine时,有一个致命的错误.我不明白导致此错误的原因.你能解释一下吗?
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int)
go func() {
for i := 0; i < 10; i++ {
ch <- i
}
} ()
// go func() {
for {
if num, ok := <-ch; !ok {
break
} else {
fmt.Printf("%d\n", num)
}
}
// } ()
time.Sleep(2 * time.Second)
close(ch)
}
Run Code Online (Sandbox Code Playgroud)
这将打印以下代码:
0
1
2
3
4
5
6
7
8
9
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
/tmp/sandbox169127128/main.go:17 +0xa0
Program exited.
Run Code Online (Sandbox Code Playgroud)
接收到ch来自发送goroutine的所有值后接收的循环块.运行时检测到程序卡住并发生混乱.
修复是在发送所有值后关闭通道:
go func() {
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
} ()
Run Code Online (Sandbox Code Playgroud)
在封闭通道上接收产生该值0, false.receive for循环中断false值.
close(ch)从程序的末尾删除.
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |