13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

创新互联GO教程:Go语言并发打印(借助通道实现)

前面的例子创建的都是无缓冲通道。使用无缓冲通道往里面装入数据时,装入方将被阻塞,直到另外通道在另外一个 goroutine 中被取出。同样,如果通道中没有放入任何数据,接收方试图从通道中获取数据时,同样也是阻塞。发送和接收的操作是同步完成的。

龙泉网站建设公司成都创新互联,龙泉网站设计制作,有大型网站制作公司丰富经验。已为龙泉千余家提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的龙泉做网站的公司定做!

下面通过一个并发打印的例子,将 goroutine 和 channel 放在一起展示它们的用法。

package main

import (
    "fmt"
)

func printer(c chan int) {

    // 开始无限循环等待数据
    for {

        // 从channel中获取一个数据
        data := <-c

        // 将0视为数据结束
        if data == 0 {
            break
        }

        // 打印数据
        fmt.Println(data)
    }

    // 通知main已经结束循环(我搞定了!)
    c <- 0

}

func main() {

    // 创建一个channel
    c := make(chan int)

    // 并发执行printer, 传入channel
    go printer(c)

    for i := 1; i <= 10; i++ {

        // 将数据通过channel投送给printer
        c <- i
    }

    // 通知并发的printer结束循环(没数据啦!)
    c <- 0

    // 等待printer结束(搞定喊我!)
    <-c

}

运行代码,输出如下:

1
2
3
4
5
6
7
8
9
10

代码说明如下:

本例的 设计模式就是典型的生产者和消费者。生产者是第 37 行的循环,而消费者是 printer() 函数。整个例子使用了两个 goroutine,一个是 main(),一个是通过第 35 行 printer() 函数创建的 goroutine。两个 goroutine 通过第 32 行创建的通道进行通信。这个通道有下面两重功能。


文章题目:创新互联GO教程:Go语言并发打印(借助通道实现)
网站路径:http://cdbrznjsb.com/article/cdpeiog.html

其他资讯

让你的专属顾问为你服务