go chan 入门代码
package main import (
"fmt"
"sync"
"time"
) // 生产数据
func producer(num ...int)(ret<-chan int) {
out:=make(chan int)
go func() {
defer close(out)
for k,v:=range num {
fmt.Printf("我在生产第%d个数据\n",k)
out<-v
fmt.Printf("生产第%d个数据完成\n",k)
}
}()
ret=out
return
} // 从通道获取数据,计算数据
func square(inCh <-chan int) (ret <-chan int) {
out:=make(chan int)
go func() {
defer close(out)
for n:=range inCh{
out<-n*n
time.Sleep(1*time.Second)
}
}()
ret=out
return
} // 给通道启动协程
func merge(cs ...<-chan int)(ret <-chan int) {
out:=make(chan int,100)
var wg sync.WaitGroup
collect:= func(in<-chan int) {
defer wg.Done()
for n:=range in{
out<-n
}
} wg.Add(len(cs)) for k,n:=range cs{
fmt.Printf("我在给执行第%d个协程\n",k)
go collect(n)
fmt.Printf("执行第%d个协程完成\n",k)
} go func() {
wg.Wait()
close(out)
}()
ret=out
return
}
func main() {
in:=producer(0,1,2,3,4,5,6,7,8,9,10)
ch1:=square(in)
ch2:=square(in)
ch3:=square(in)
ch4:=square(in)
ch5:=square(in)
// 拿到数据结果
for ret:=range merge(ch1,ch2,ch3,ch4,ch5){
time.Sleep(1*time.Second)
fmt.Printf("%3d\n",ret)
} }
go chan 入门代码的更多相关文章
- TensorFlow(1)注解入门代码
学习当然要从官方的入门文档开始. 但是这篇入门对于从0开始的初学者似乎有些困难,尤其是对于神经网络知识还是一知半解的. 敲完理解一遍还是懵逼. TensorFlow经典入门代码学习备注如下. impo ...
- Mybatis最入门---代码自动生成(generatorConfig.xml配置)
[一步是咫尺,一步即天涯] 经过前文的叙述,各位看官是不是已经被Mybatis的强大功能给折服了呢?本文我们将介绍一个能够极大提升我们开发效率的插件:即代码自动生成.这里的代码自动生成包括,与数据库一 ...
- 使用Maven编译运行Storm入门代码(Storm starter)(转)
Storm 官方提供了入门代码(Storm starter),即 Storm安装教程 中所运行的实例(storm-starter-topologies-0.9.6.jar),该入门代码位于 /usr/ ...
- ActiveMQ入门系列二:入门代码实例(点对点模式)
在上一篇<ActiveMQ入门系列一:认识并安装ActiveMQ(Windows下)>中,大致介绍了ActiveMQ和一些概念,并下载.安装.启动他,还访问了他的控制台页面. 这篇,就用代 ...
- JavaScript: JavaScript的简介和入门代码演示
1.Javascript的发展历史介绍: javascript是指的实在网页上编写的编程语言,其主要是控制器html的动态显示效果.HTMl能带来的只是一些基本的页面的风格,而要展示的漂亮使用CSS, ...
- 【F#】 入门代码
找下感觉: 语法和go 如出一辙, 都是erlang派的语言 在 vs 中我没有找到自动缩进的快捷键 github上的F#代码也相对较少 // 在 http://fsharp.org 上了解有关 F# ...
- unity8个入门代码
01,基本碰撞检测代码 function OnCollisionEnter(theCollision:Collision){ if(theCollision.gameObject.name==&quo ...
- CSS快速入门-代码目录
我们写python代码或者其他代码的时候,发现文件会越来越多,这时候你就觉得有必要把代码文件进行整理了. 对代码整理的整理主要思路: 1.按功能(比如:可执行程序文件.数据库文件.视图文件) 2.按类 ...
- 《图说VR入门》——googleVR入门代码分析
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53013843 作者:car ...
随机推荐
- Qt 按名称查找子节点
TreeItem* TreeModel::GetItem(QStringList& list, TreeItem* parent ,int deep) { ).toString()) { if ...
- 跟随我在oracle学习php(16)
数据库的增删改查 增:create database [if not exists ] 数据库名 [charset 字符集] [collate 字符排序规则]: 说明: 1,if n ...
- AVR 嵌入式单片机芯片的中断系统介绍
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- [Leetcode 39]组合数的和Combination Sum
[题目] Given a set of candidate numbers (candidates) (without duplicates) and a target number (target) ...
- gridview单击选中勾选框
1.Dev2005版本: gridView1.OptionsBehavior.ShowEditorOnMouseUp = false;2.Dev2013版本: gridView1.OptionsBeh ...
- python enumerate用法总结
enumerate()说明enumerate()是python的内置函数enumerate在字典上是枚举.列举的意思对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enumera ...
- linux驱动由浅入深系列:PBL-SBL1-(bootloader)LK-Android启动过程详解之一(高通MSM8953启动实例)
转自:http://blog.csdn.net/radianceblau/article/details/73229005 http://www.aiuxian.com/article/p-14142 ...
- Redis操作1
本文章内容节选自<PHP MVC开发实战>一书第16.4.2章节. 一.概述 Redis是一个NoSQL数据库,由于其数据类型的差异,所以要在MVC框架中实现CURD操作,比较繁锁.事实上 ...
- 运行Office 2007安装程序提示:"找不到Office.zh-cn\OfficeMUI.xml"(转载)亲测
去网上查结果原来是Office 2007和Visual Studio 2008 Authoring Component组件相冲突,网上说用VS.Net 2008光盘WCU\WebDesignerCor ...
- mysql建表时
问题:Incorrect column specifier for column 'id' 答案:原来自动增长列用int数据类型,不用varchar