41. select阻塞一个gorountine上的多个通讯操作 | 厚土Go学习笔记

select 语句可以使得一个 goroutine 在多个通讯操作上等待。select 会阻塞,直到条件分支中的某个分支可以执行,就执行此分支。当多个分支都准备好的时候,会随机执行一个。

这个 select 还是使用 fibonacci 函数来实现。

func fibonacci(c, quit chan int)  {
    x, y := 0, 1
    for{
        select {
        case c <- x:
            x, y = y, x+y
        case <-quit:
            fmt.Println("quit")
            return
        }
    }
}

而使用这个函数里的通道,我们建立一个 goroutine,做一个 10 次的循环。在循环中取得通道返回的值。并在循环结束后,接收另一个通道的值。

go func() {
    for i := 0; i < 10; i++{
        fmt.Println(<- c)
    }
    quit <- 0
}()

完整代码

package main

import "fmt"

func fibonacci(c, quit chan int)  {
    x, y := 0, 1
    for{
        select {
        case c <- x:
            x, y = y, x+y
        case <-quit:
            fmt.Println("quit")
            return
        }
    }
}

func main() {
    c := make(chan int)
    quit := make(chan int)
    go func() {
        for i := 0; i < 10; i++{
            fmt.Println(<- c)
        }
        quit <- 0
    }()
    fibonacci(c, quit)
}

运行结果如下

0
1
1
2
3
5
8
13
21
34
quit

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2018-01-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏mySoul

node函数 node路由

访问连接 http://127.0.0.1:1937/hello%20word.html

18640
来自专栏mySoul

客户端的js js脚本的引入 js的解析过程

window对象定义了一些属性,用来指定当前窗口的一些信息。通过该属性的引用,可以获取当前窗口的信息

28880
来自专栏Java帮帮-微信公众号-技术文章全总结

错误集锦2.jsp页面syntax error,insert“}”to complete block

补:错误集锦1-HttpServlet was not found on the Java Build Path。 我们在用Eclipse进行Java web开...

37240
来自专栏陈本布衣

treeview插件使用:根据子节点选中父节点

  鄙人公司没有专门的前端,所以项目开发中都是前后端一起抡。最近用bootstrap用的比较频繁,发现bootstrap除了框架本身的样式组件外,还提供了多种插...

56640
来自专栏Danny的专栏

【MyEclipse】——MyEclipse设置注释模板

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

12830
来自专栏林冠宏的技术文章

关于在用curl函数post网页数据时,遇上表单提交 type为submit 类型而且没有name和id时可能遇到的问题及其解决方法

curl函数库实现爬网页内容的链接在 http://www.cnblogs.com/linguanh/p/4292316.html 下面这个是没有name和id...

20970
来自专栏IMWeb前端团队

谈一谈CDN的JS,CSS文件加载出错主域名重试的问题

背景知识 【卡爷文章】CSS文件动态加载(续)—— 残酷的真相 浏览器 CSS/JS 加载能力测试表 css、js的相互阻塞 了解这些基础知识之后,我们再来谈谈...

25850
来自专栏jouypub

优化Vue项目的文件大小

在使用Vue搭建项目时,经常由于引入的库太多,导致打包后的文件体积非常大,特别是vendor.js。这就造成页面第一次打开很慢,如果在浏览器中调试页面(打开控制...

32530
来自专栏九彩拼盘的叨叨叨

CSS拓展语言:Sass介绍

CSS拓展语言出现的原因是,CSS自身支持的功能能有限(如不支持变量,条件控制,循环等编程元素),并不满足我们想要的一些功能。而CSS拓展语言支持CSS不支持的...

11220
来自专栏Golang语言社区

Golang控制goroutine的启动与关闭

最近在用golang做项目的时候,使用到了goroutine。在golang中启动协程非常方便,只需要加一个go关键字:  go myfunc(){     ...

38370

扫码关注云+社区

领取腾讯云代金券