go的单向通道
温馨提示:
本文最后更新于 2022年01月22日,已超过 1,099 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
我们可以通过channel做为协程通信,但是为了避免多协程中操作通道时污染变量,我们可以通过单向通道进行限制
函数参数声明:
(out chan<- int) 参数只允许接收数据,不允许发送数据
(in <-chan int) 参数只允许发送数据,不允许接收
``````as3
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)
}
正文到此结束
- 本文标签: 编程语言
- 本文链接: https://www.php20.cn/article/330
- 版权声明: 本文由仙士可原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权