go 通道

1.

package main

import "fmt"

func sum(s []int, c chan int) {
    sum := 0
    for _, v := range s {
        sum += v
    }
    c <- sum // 把 sum 发送到通道 c
}

func main() {
    s := []int{7, 2, 8, -9, 4, 0}

    c := make(chan int)

    go sum(s[len(s)/2:], c)
    go sum(s[:len(s)/2], c)
    x, y := <-c, <-c // 从通道 c 中接收

    fmt.Println(x, y, x+y)
}

输出

17 -5 12

2.

package main

import "fmt"

func main() {
    // 这里我们定义了一个可以存储整数类型的带缓冲通道
    // 缓冲区大小为2
    ch := make(chan int, 2)

    // 因为 ch 是带缓冲的通道,我们可以同时发送两个数据
    // 而不用立刻需要去同步读取数据
    ch <- 1
    ch <- 2
    // 获取这两个数据
    fmt.Println(<-ch)
    fmt.Println(<-ch)
}

输出

1
2

3.

package main

import (
    "fmt"
)

func fibonacci(n int, c chan int) {
    x, y := 0, 1
    for i := 0; i < n; i++ {
        c <- x
        x, y = y, x+y
    }
    close(c)
}

func main() {
    c := make(chan int, 10)
    go fibonacci(cap(c), c)
    // range 函数遍历每个从通道接收到的数据,因为 c 在发送完 10 个
    // 数据之后就关闭了通道,所以这里我们 range 函数在接收到 10 个数据
    // 之后就结束了。如果上面的 c 通道不关闭,那么 range 函数就不
    // 会结束,从而在接收第 11 个数据的时候就阻塞了。
    for i := range c {
        fmt.Println(i)
    }
}

输出

0
1
1
2
3
5
8
13
21
34

原文地址:https://www.cnblogs.com/sea-stream/p/10325468.html

时间: 2024-10-29 18:36:45

go 通道的相关文章

Halcon学习之三:有关图像通道的函数

黑白摄像机会返回每个像素所对应的能量采用结果,这些结果组成了一幅单通道灰度值图像,而对于RGB彩色摄像机,它将返回每个像素所对应的三个采样结果,也就是一幅三通道图像.下面这些是与图像通道有关的函数: 1.access_channel ( MultiChannelImage : Image : Channel : ) 获取多通道图像MultiChannelImage的Channel通道的图像Image. 2.append_channel ( MultiChannelImage, Image : I

Java NIO3:通道和文件通道

通道是什么 通道式(Channel)是java.nio的第二个主要创新.通道既不是一个扩展也不是一项增强,而是全新的.极好的Java I/O示例,提供与I/O服务的直接连接.Channel用于在字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效地传输数据. 通常情况下,通道与操作系统的文件描述符(FileDescriptor)和文件句柄(FileHandler)有着一对一的关系.虽然通道比文件描述符更广义,但开发者经常使用到的多数通道都是连接到开放的文件描述符的.Channel类

JTI + JNI,为Java程序提供获取JVM内部信息的通道

首先,JTI是啥? HotSpot JVM是使用C++写的,在操作系统层面来看,java.exe进程与其他进程并无特别之处.任何一个进程都可以加载第三方的DLL,JTI就是java.exe开放出来的向Java.exe进程注入dll的接口.也就是说,开发者根据JTI定义好的规范,用C++写一个dll,这个dll就可以被java.exe进程加载了[启动jvm的时候要加上-agentlib参数]. JTI的详细资料参见以下网址:http://docs.oracle.com/javase/7/docs/

带组装2ROS_1node_128通道

原有的读出方式不变. 发送端控制发送频率为1KHz. 在cmm03node03 节点上各布置2个ROS.每个ROS接收64个通道的数据.每个ROS 1 个RequestHandler, 一共有44个SFI.接收端和发送端的socket buffer size 都设置为8MB.SFI布置在cmm02node01,cmm02node03, cmm02node04, cmm02node05, cmm02node07, cmm02node13, cmm02node08, cmm02node10, cmm

go语言关于线程与通道channal

在go语言中,封装了多线程的使用方法,使其变得简单易用. 在这里说说自己一点体会,不正确的地方还是请各位大牛指正. 关于go语言的并发机制,这很简单,在你要执行的函数前面加上go即可 比如: package main import( "fmt" ) func main(){ go fmt.Println("1") fmt.Println("2") } 好了 这样即可使用,但是这个程序运行的时候会出问题,你会发现1打印不出来,为啥? 你问我为啥?

WCF 通道模型——实例篇

昨天在园子里看了一位高手的文章,对于WCF通道模型从设计层面到实际运用层面讲的非常的清楚和透彻,所以今天自己也动手写一点code来理解一下. 之前关于wcf通道模型的讲解的书看了两遍也没这次理解那么的深刻. 今天演示的只是一个简单的Demo, 这个程序的code其实在MSDN上就可以找到,稍加些自己的设计在里面就可以了,但WCF底层通信的逻辑和用法与MSDN上面的演示程序是一样.接下来先介绍一下整体需求. 需求:实现一个客户端和服务端,采用Http协议和请求响应式通信方式,实现简单的文本信息发送

【收藏转】WCF后传系列(8):深度通道编程模型Part 1—设计篇

引言 从本质上说,WCF是一个通信服务框架,它允许我们使用不同的传输协议,使用不同的消息编码形式,跟不同的WS-*系列规范交互,而所有这些细节都是由通道堆栈来处理的.为了简化这些处理,在WCF中提供了两种模型,一是针对开发者的应用程序编程模型:二是用来通信的通道模型,这样对于开发者来说,只要了解应用程序编程模型就足够了,而不会涉及到通道模型,然而,对于通道模型进行必要的学习,可以让我们真正理解WCF中“通信”概念,了解WCF的 整个架构体系,从而构建出更加健壮的WCF服务或者对WCF框架进行扩展

【收藏转】WCF后传系列(9):深度通道编程模型Part 2—实例篇

引言 从本质上说,WCF是一个通信服务框架,它允许我们使用不同的传输协议,使用不同的消息编码形式,跟不同的WS-*系列规范交互,而所有这些细节都是由通道堆栈来处理的.在<WCF专题系列(8):深度通道编程模型Part 1—设计篇>中,对于WCF中的通道模型有了深入的认识,本文中,我将通过实例来说明在通道模型中,服务端是如何接收消息,客户端是如何发送消息的. 服务端通道 本文将不使用WCF的编程模型,而直接利用通道模型来进行通信,这样有助于我们更进一步加深对服务端处理消息的认识,在服务端侦听并接

解惑rJava R与Java的高速通道

阅读导读: 1.什么是RJava? 2.如何安装RJava? 3.如何用RJava实现R调用Java? 1. rJava介绍 rJava是一个R语言和Java语言的通信接口,通过底层JNI实现调用,允许在R中直接调用Java的对象和方法. rJava还提供了Java调用R的功能,是通过JRI(Java/R Interface)实现的.JRI现在已经被嵌入到rJava的包中,我们也可以单独试用这个功能.现在rJava包,已经成为很多基于Java开发R包的基础功能组件. 正式由于rJava是底层接口

解决Error"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系

今天写程序的时候调用到一个第三方的DLL文件,本机调试一切都正常,但是程序不是到服务器以后一直提示一个BUG:"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系". 后来把DLL文件进行反编译,发现是在获得请求的时候出错了. 引用 WebResponse response = WebRequest.Create("https://--").GetResponse(); 于是在服务器上用浏览器打开上面的地址,发现会弹出一个确认证书的窗口,看来是证书问题.