chan array初始化

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 [5]chan int
for i := range chans {
   chans[i] = make(chan int)
}

  

 
原文地址:https://www.cnblogs.com/logo-fox/p/5591741.html