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语言程序设计有所帮助。














本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/6523549.html,如需转载请自行联系原作者

相关文章
|
8月前
|
Go
Go的管道进阶操作
除了基本的管道操作,还有一些稍微高级点的操作。
42 0
|
6月前
|
设计模式 Kubernetes 监控
Go编程模式 - 8-装饰、管道和访问者模式
装饰、管道和访问者模式的使用频率不高,但在特定场景下会显得很酷
21 0
|
8月前
|
Go
Go的管道堵塞解决方案
如果没有避免管道堵塞,我们应该怎么办?
97 0
|
8月前
|
Go
Go管道堵塞的避免
怎么样避免管道堵塞?
39 0
|
8月前
|
Go
Go的管道堵塞
简单实现一个管道堵塞的案例。
39 0
|
8月前
|
Go
Go管道操作进阶Plus版
除了基本操作和稍微高级一些的操作外,Go的管道操作还能更复杂。
39 0
|
8月前
|
存储 安全 Go
Go管道方式
在Go语言中,管道(Channel)是一种用于在不同的goroutine之间进行通信和同步的机制。
60 0
|
分布式计算 并行计算 算法
go 搭建并行处理管道
Go语言并发编程
150 0
go 搭建并行处理管道
|
缓存 Go 调度
管道(Channel)的读取与写入「让我们一起Golang」
管道(Channel)的读取与写入「让我们一起Golang」
1617 0