go:代码异常解决
fatal error: all goroutines are asleep - deadlock goroutine 1 [chan send]:
func main() {
num := make(chan int,2)
go func() {
for i := 0; i < 5; i++ {
data := <-num
fmt.Println("读取的数据:",data)
}
}()
go func() {
for i := 0; i < 3; i++ {
num <- i
fmt.Println("写的2的数据:",i)
}
}()
for i := 0; i < 5; i++ {
num <- i
fmt.Println("写入的数据:",i)
}
time.Sleep(time.Second *10)
}
返回结果:
写入的数据: 0
写入的数据: 1
读取的数据: 0
读取的数据: 1
读取的数据: 2
读取的数据: 0
写的2的数据: 0
写的2的数据: 1
写的2的数据: 2
读取的数据: 1
写入的数据: 2
写入的数据: 3
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan send]:
main.main()
出现上面原因是因为channel出现了读写不对等的情况,上面例子,两个写一个读
共计写了8次,但是只读取了5次,就造成了输出结果中"写入的数据:3"后就出现了异常
解决:
读取数据的次数改为8即可
go func() {
for i := 0; i < 8; i++ {
data := <-num
fmt.Println("读取的数据:",data)
}
}()