专栏首页Golang语言社区Go语言的管道Channel用法实例

Go语言的管道Channel用法实例

本文实例讲述了Go语言的管道Channel用法。分享给大家供大家参考。具体分析如下:

channel 是有类型的管道,可以用 channel 操作符 <- 对其发送或者接收值。 ch <- v // 将 v 送入 channel ch。 v := <-ch // 从 ch 接收,并且赋值给 v。 (“箭头”就是数据流的方向。) 和 map 与 slice 一样,channel 使用前必须创建: ch := make(chan int) 默认情况下,在另一端准备好之前,发送和接收都会阻塞。这使得 goroutine 可以在没有明确的锁或竞态变量的情况下进行同步。

package main
import "fmt"
func sum(a []int, c chan int) {
    sum := 0
    for _, v := range a {
        sum += v
    }
    c <- sum  // send sum to c
}
func main() {
    a := []int{7, 2, 8, -9, 4, 0}
        c := make(chan int)
    go sum(a[:len(a)/2], c)
    go sum(a[len(a)/2:], c)
        x, y := <-c, <-c  // receive from c
    fmt.Println(x, y, x + y)
}

希望本文所述对大家的Go语言程序设计有所帮助。

本文分享自微信公众号 - Golang语言社区(Golangweb)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-08-21

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 39. channel管道 | 厚土Go学习笔记

    channel 是有类型的管道,channel 的操作符是 <- ,可以用来发送或接收值。 ch <- v //赋值给管道,管道接收值 v := <- c...

    李海彬
  • Go Reflect 理解

    最近在看一些go语言标准库以及第三方库的源码时,发现go的reflect被大量使用,虽然反射的机制大多数语言都支持,但好像都没有go一样这么依赖反射的特性。个人...

    李海彬
  • go语言ping实现

    package main import ( "flag" "fmt" "net" ...

    李海彬
  • LeetCode 525. 连续数组(前缀和+哈希)

    给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组(的长度)。

    Michael阿明
  • 由旋转画廊,看自定义RecyclerView.LayoutManager

    前段时间需要一个旋转木马效果用于展示图片,于是第一时间在github上找了一圈,找了一个还不错的控件,但是使用起来有点麻烦,始终觉得很不爽,所以寻思着自己做一个...

    开发的猫
  • O(n)时间的排序

    题目:某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄作排序,可使用O(1)的辅助空间。      题目特别强调是对一个公司的员工的年...

    猿人谷
  • OpenCV图像处理笔记(二):图片操作进阶

    MiChong
  • 算法提高 概率计算

    问题描述   生成n个∈[a,b]的随机整数,输出它们的和为x的概率。 输入格式   一行输入四个整数依次为n,a,b,x,用空格分隔。 输出格...

    AI那点小事
  • 【每天一道编程系列-2018.3.7】(Ans)

      Given an array S of n integers, find three integers in S such that the sum is ...

    yesr
  • 程序媛不如程序猿?看看这些高颜值大神

    在中国,男女程序员的比例相差甚远,女程序员只占 7.8%,即便是大牌科技公司的 Twitter 的女工程师只占 10%,Facebook 的女工程师...

    编程范 源代码公司

扫码关注云+社区

领取腾讯云代金券