go的单向通道

举报
仙士可 发表于 2023/06/26 17:10:15 2023/06/26
【摘要】 我们可以通过channel做为协程通信,但是为了避免多协程中操作通道时污染变量,我们可以通过单向通道进行限制函数参数声明:(out chan<- int) 参数只允许接收数据,不允许发送数据(in <-chan int) 参数只允许发送数据,不允许接收复制package mainimport ( "fmt")func main() { chan1 := make(chan int...

我们可以通过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)
}
复制
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。