3.12 Go之并发打印(借助通道实现)


3.12 Go之并发打印(借助通道实现)

使用无缓冲通道实现并发打印数字

示例代码:

package main
?
import "fmt"
?
/*
Go之并发打印结果
*/
/* 定义一个打印函数 */
func printer(c chan int) {
   // 无限循环等待数据
   for {
      // 从chan当中接收数据
       data := <-c
?
       // 如果接收到的数据为0则退出
       if data == 0 {
           break
      }
?
       // 否则打印数据
       fmt.Println(data)
  }
?
   // 将0放入通道中
   c <- 0
}
?
/* 在main中进行调用 */
func main() {
   // 创建一个通道
   c := make(chan int)
?
   // 并发执行printer,传入channel
   go printer(c)
?
   // 循环发送值给通道
   for i := 1; i < 10; i++ {
       // 将数据发送到通道中
       c <- i
  }
?
   // 结束printer当中的循环
   c <- 0
?
   // 匿名接收
   <-c
}