Go语言的管道Channel用法实例


本文向大家介绍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语言程序设计有所帮助。

声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#yiidian.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。