chan array初始化

Posted 丹江流

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
}

 

  

 

以上是关于chan array初始化的主要内容,如果未能解决你的问题,请参考以下文章

js代码片段: utils/lcoalStorage/cookie

go 利用chan的阻塞机制,实现协程的开始阻塞返回控制器

Go语言基础之并发 goroutine chan

[TIA PORTAL][CONVERT] Convert Char Array to DInt...DInt to Char Array..Useful and easy function(代码片段

Discuz代码片段

javascript常用代码片段