chan array初始化

时间:2024-08-08 10:36:02
package main

import "fmt"

func run() {
chann[0] <- 1
} var chann = make([]chan int, 2) func main() {
go run()
obj := <- chann[0]
fmt.Println(obj)
}
OUT:fatal error: all goroutines are asleep - deadlock!

如果用fswatch观看,只能发现是阻塞的,没有这个信息。

该问题产生的原因:

var chann = make([]chan int, 2) 仅仅是初始化了chan 数组,但是数组中的每个chan没有初始化,值为nil. 这个时候不论是往通道变量里写数据还是读数据都是无法进行的。

  正确的初始化方法:

var chans = []chan int {
make(chan int),
make(chan int),
make(chan int),
make(chan int),
make(chan int),
} 或者 var chans []chan int
for i := range chans {
chans[i] = make(chan int)
}