go的单向通道

我们可以通过channel做为协程通信,但是为了避免多协程中操作通道时污染变量,我们可以通过单向通道进行限制

函数参数声明:

(out chan<- int)  参数只允许接收数据,不允许发送数据
(in <-chan int)  参数只允许发送数据,不允许接收
package main

import (
   "fmt"
)

func main() {
   chan1 := make(chan int)
   chan2 := make(chan int)
   go sendChan(chan1)  //函数sendChan只允许发送数据
   go squarer(chan2, chan1) //函数squarer将chan1的数据转给chan2
   go recvChan(chan2) //函数recvChan只允许接收数据
   select {}
}

func sendChan(in chan<- int) {
   i := 0
   for {
      in <- i
      i++
   }
}

func recvChan(out <-chan int) {
   for i := range out {
      fmt.Println("out输出:", i)
   }
}

func squarer(out chan<- int, in <-chan int) {
   for i := range in {
      out <- i
   }
   close(out)
}



仙士可博客
请先登录后发表评论
  • 最新评论
  • 总共1条评论
仙士可博客

会飞的鱼-daiying.net.cn:加油

2022-01-22 14:19:09 回复

仙士可博客
  • 仙士可 回复 会飞的鱼-daiying.net.cn:谢谢,共勉
  • 2022-01-22 15:18:21 回复
  • 本站由白俊遥博客程序搭建
    © 2017-1-17 php20.cn 版权所有 ICP证:闽ICP备17001387号
  • 本网站由: 提供cdn加速/云存储服务
  • 联系邮箱:1067197739@qq.com