go的channel的使用

func Count(ch chan int) {
	counter++
	ch <- counter
	fmt.Println("Counting")
}

func main() {
	chs := make([]chan int, 10)
	for i := 0; i < 10; i++ {
		chs[i] = make(chan int)
		go Count(chs[i])
	}
	for index, ch := range chs {
		fmt.Println(index, "", <-ch)
	}
}

输出一致结果:
Counting
	0  1
	1  10
	2  10
	3  10
	4  10
	5  10
	6  10
	7  10
	8  10
	9  10

猜测是range方法读取channel (chs)时候先读取第一个,然后再读取剩余全部,如果剩余管道缓冲数据没有填满N,则阻塞

另外一个种方案:

func Count(ch chan int) {
	ch <- counter
	counter++
	fmt.Println("Counting")
}
输出一致结果:
Counting
	0  0
	1  1
	2  1
	3  1
	4  1
	5  1
	6  1
	7  1
	8  1
	9  1
时间: 2024-10-20 16:43:18

go的channel的使用的相关文章

golang控制channel的出入口

golang控制channel的出入口 我们常常使用channel来在多个goroutine之间做数据通讯,但是chan作为函数的入参我们应该怎么写呢?也许有人觉得这个问题比较傻,不过这个还真的是我今天才知道的. 首先我们看看下面的代码: func main() { c := make(chan int) go in(c) go out(c) time.Sleep(time.Second) } func in(c chan int) { for i := 0; i < 10; i++ { c <

使用windows server2012时FileZilla客户端连接时报150 Opening data channel for directory listing of &quot;/&quot; 响应:425 Can&#39;t open data connection

425 Can't open data connection 和 读取目录列表失败 问题解决 这个问题主要是由于使用Passive Mode模式造成的,解决这个问题很简单: 1.在ftp服务软件中设置指定端口地址范围,允许Passive Mode使用,比如60000-60020 2.然后在ftp服务器的系统防火墙上打开这些tcp端口,比如是60000-60020,如果使用windows自带的防火墙,就一条一条的增加,20行有点麻烦,但是可以解决. 如果ftp用户较多,可以扩大端口范围. 3.如果

Flume-ng源码解析之Channel组件

如果还没看过Flume-ng源码解析之启动流程,可以点击Flume-ng源码解析之启动流程 查看 1 接口介绍 组件的分析顺序是按照上一篇中启动顺序来分析的,首先是Channel,然后是Sink,最后是Source,在开始看组件源码之前我们先来看一下两个重要的接口,一个是LifecycleAware ,另一个是NamedComponent 1.1 LifecycleAware @[email protected] interface LifecycleAware {  public void s

TODO:Go语言goroutine和channel使用

goroutine是Go语言中的轻量级线程实现,由Go语言运行时(runtime)管理.使用的时候在函数前面加"go"这个单词作为关键词,也是与普通函数的区别了.在函数前面加go关键字就可以创建一个新的goroutine进行并发执行. go hello() channel是Go语言提供的goroutine间的通信方式,我们可以使用channel在两个或多个goroutine之家传递消息.channel使用的关键字是用"chan",声明一个传递类型为int的chann

图解Netty之Pipeline、channel、Context之间的数据流向。

声明:本文为原创博文,禁止转载.       以下所绘制图形均基于Netty4.0.28版本. 一.connect(outbound类型事件)  当用户调用channel的connect时,会发起一个outbound类型的事件,该事件将在pipeline中传递(pipeline.connect),首先由tail handler处理,该handler只是将事件透传给下一个outbound类型的用户Handler(如果有),事件依次传递下去,直到传递到head handler,该handler会调用

poj1129 Channel Allocation DFS

题目 题意:给定N个节点,让你对其涂色,使其任何相邻的两个节点颜色不同. 思路: 1. 问题模型是着色问题,枚举颜色的个数, 每次枚举看可以完成全部点的着色. 2. 采用深搜,每一次当前色的种数深搜完毕就加1种,直到全部点都被着色完毕, 这样 从最少的开始深搜,结果出现肯定是最少的. 该题N<26,可以不用四色原理剪枝. 附上一发代码: 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #i

《JAVA NIO》Channel

1.类图 Channle主要分为两类:File操作对应的FIleChannel和Stream操作对应的socket的3个channel.问题:stream操作除了socket还有其他的吧?例如串口等 3.1.1打开通道通道可以以多种方式创建.Socket 通道有可以直接创建新socket 通道的工??方法.但是一个FileChannel 对象却只能通过在一个打开的RandomAccessFile.FileInputStream 或 FileOutputStream对象上调用getChannel(

《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果

本文完全转载:http://www.cnblogs.com/Imageshop/p/3281703.html,再次仅当学习交流使用.. <Single Image Haze Removal Using Dark Channel Prior>一文中图像去雾算法的原理.实现.效果(速度可实时) 本文算法合作联系QQ: 33184777, 非诚勿扰 邮件地址:   [email protected] 最新的效果见 :http://video.sina.com.cn/v/b/124538950-125

go:channel(未完)

注:1)以下的所有讨论建立在包含整形元素的通道类型之上,即 chan int 2)对于“<-”我的理解是,它可能是一个操作符(接收操作符),也  可能是类型的一部分(如“chan<- int”表示包含整形元素的发送通道类型) 带缓冲和不带缓存的channel 1.带缓冲:ch:=make(chan int,1) 1)goruntine A 中包含语句 ch<-1:表示向ch发送1,若此时ch中已经有一个数据,则A阻塞在此处,直到ch中的数据被取走: 2)goruntine A 中包含语句

JavaNIO之Channel

Channel的本质是通道,用来连接JVM之外数据向JVM内传输数据,比如来自于硬盘的文件,来自于网络的数据包.JVM之外的数据就是通过Channel进行数据传输:如果把Channel比作河道,那么作为数据的载体就是ByteBuffer,buffer的隐喻就是容器,专门用于传输数据的容器: 作为channel的获取,是通过文件对象RandomAccessFile.getChannel()方式获得:然后通过read()以及write()方法来通过Buffer写入以及读取. Buffer的flip方