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)
}

  

 
时间: 2024-10-01 02:15:03

chan array初始化的相关文章

【C++】array初始化0

让代码...优雅? ==================分割线==================== 局部数组:没有默认值,如果声明的时候不定义,则会出现随机数(undefined):如果声明的长度与赋值长度不相等,则有,声明的长度>赋值长度,后面用0补足,声明的长度>赋值长度,发生编译错误: 全局数组:声明时不赋值,默认值为0 指针new:动态获取的内存,默认值undefined 初始化为0: 1. 全局数组 int arr[10]; 2. 局部数组 int arr[10] = {}; 3

C# List&lt;&gt;与Array、ArrayList联系

Array: Array初始化对象的时候必须要指定其大小 抽象类,不能构造函数实例化一个Array(例如:Array arr = new Array[]错误) 但是可以这样初始化一个Array类 Array arr = new int[3]{1,2,3}; 也可以使用Array类的CreateInstance方法来初始化 Array arr = Array.CreateInstance(typeof(int),3) 在这里定义了一个3个元素的int数组 ArrayList: 初始化的时候不必指定

容器初始化、赋值、关系运算

1.vector初始化方法 1.1vector.list.deque.string初始化方法 //四种初始化方法 //初始化方法1 //1.10个1: vector<int> vec1(10, 1); vector<int> vec2{0,1,2};//列表初始化 vector<int> vec3; //2.初始化方法2 //2.1要求有相同的容器类型和元素类型 vec3 = vec2;//拷贝初始化 //3.初始化方法3 //3.1同vec2 vector<in

Java程序员的Golang入门指南(上)

Java程序员的Golang入门指南 1.序言 Golang作为一门出身名门望族的编程语言新星,像豆瓣的Redis平台Codis.类Evernote的云笔记leanote等. 1.1 为什么要学习 如果有人说X语言比Y语言好,两方的支持者经常会激烈地争吵.如果你是某种语言老手,你就是那门语言的"传道者",下意识地会保护它.无论承认与否,你都已被困在一个隧道里,你看到的完全是局限的.<肖申克的救赎>对此有很好的注脚: [Red] These walls are funny.

go语言学习笔记

go语言学习笔记 go语言学习笔记(初级) 最近一直在学习go语言,因此打算学习的时候能够记录 一下笔记.我这个人之前是从来没有记录笔记的习惯, 一直以来都是靠强大的记忆力去把一些要点记住. 读书的时候因为一直都是有一个很安静和很专心的环境, 因此很多事情都能记得很清楚,思考的很透彻.但是随着 年纪不断增加,也算是经历了很多的事情,加上工作有时会让人 特别烦闷,很难把心好好静下来去学习,去思考大自然的终极 奥秘,因此需要记录一些东西,这些东西一方面可以作为一种自我激励 的机制,另一方面,也算是自

中文汉字转换拼音PHP类

1 <?php 2 /** 3 * 中文汉字转换拼音类 4 * 功能支持 5 * 1.支持中文转换全拼 6 * 2.支持中文转换简拼(首字母) 7 * 3.支持转换的字符串返回格式设置(字符中间的间隔字符) 8 * 方法包含四个可以直接调用 请查看类注释 以及调用示例 9 * getJp.getQp.getJpDelimiter.getQpDelimiter 10 * 11 * 以下是研究本代码看懂本类需要的知识点: 12 * 1.掌握PHP的面向对象编程的基本用法 13 * 2.掌握计算机AS

PHP正则表达式中函数preg_match()与preg_match-all的简单使用

<?php $pattern='/[0-9]/';                                           //定义匹配的模式 $subject='weuyr3ui76as83s0ck9';                 //定义需匹配的对象 $m1=$m2=array();                                          //初始化两个空数组 $num1=preg_match($pattern, $subject, $m1);  

JavaScript高级程序设计---学习笔记(三)

函数表达式 定义函数的方式有两种:一种是函数声明,另一种是函数表达式. 关于函数声明,它的一个重要特征就是函数声明提升,意思是在执行代码之前会先读取函数声明所以可以把函数声明放在调用它的语句后面. 而函数表达式必须在调用它之前定义. 1.递归 递归函数是在一个函数通过名字调用自身的情况下构成的,如: function factorial(num){ if(num <= 1){ return 1; }else{ return num * factorial(num - 1); } } 这是一个经典

Redis应用----消息传递

1.摘要 消息传递这一应用广泛存在于各个网站中,这个功能也是一个网站必不可少的.常见的消息传递应用有,新浪微博中的@我呀.给你评论然后的提示呀.赞赞赞提示.私信呀.甚至是发微博分享的新鲜事:知乎中的私信呀.live发送过来的消息.知乎团队消息呀等等. 2.实现方法 消息传递即两个或者多个客户端在相互发送和接收消息. 通常有两种方法实现: 第一种为消息推送.Redis内置有这种机制,publish往频道推送消息.subscribe订阅频道.这种方法有一个缺点就是必须保证接收者时刻在线(即是此时程序