情况一: 单线程的情况下,往channel中放入数据量超过其channel的大小的时候
func main(){
var ch = make(chan int, 2)
ch <- 2
ch <- 3
ch <- 8
}
出现的错误如下:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan send]:
main.main()
/Users/lcq/go/src/go_base/gochanneldemo/channeldemo.go:32 +0x8d
情况二: 单线程的情况下,把channel中的数据全部取出后,还继续取数据的时候
func main(){
var ch = make(chan int, 2)
ch <- 2
ch <- 3
// ch <- 8
// 开始取出数据
fmt.Println(<-ch)
fmt.Println(<-ch)
fmt.Println(<-ch)
}
错误如下:
2
3
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
/Users/lcq/go/src/go_base/gochanneldemo/channeldemo.go:36 +0x1c6
情况三: channel没有关闭的情况下,使用for range进行遍历
func main(){
var ch = make(chan int, 3)
ch <- 2
ch <- 3
// close(ch)
// for range遍历 也就是将channel中的数据取出来的
for val := range ch{
fmt.Println(val)
}
// fmt.Println(<-ch)
}
错误如下:
2
3
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
/Users/lcq/go/src/go_base/gochanneldemo/channeldemo.go:60 +0xfd