go的单向通道

简介: go的单向通道

我们可以通过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)
}
目录
相关文章
|
6月前
|
供应链 Go
掌握Go语言:利用Go语言的单向通道和select语句,提升库存管理效率(21)
掌握Go语言:利用Go语言的单向通道和select语句,提升库存管理效率(21)
|
6月前
|
安全 Go
掌握Go语言:Go语言通道,并发编程的利器与应用实例(20)
掌握Go语言:Go语言通道,并发编程的利器与应用实例(20)
|
6月前
|
安全 Go 数据处理
Go语言CSP编程实战:通道通信技术
Go语言CSP编程实战:通道通信技术
94 0
|
6月前
|
Go
通道多路复用:Go语言并发编程的黄金法则
通道多路复用:Go语言并发编程的黄金法则
95 0
|
26天前
|
安全 Go 调度
探索Go语言的并发模式:协程与通道的协同作用
Go语言以其并发能力闻名于世,而协程(goroutine)和通道(channel)是实现并发的两大利器。本文将深入了解Go语言中协程的轻量级特性,探讨如何利用通道进行协程间的安全通信,并通过实际案例演示如何将这两者结合起来,构建高效且可靠的并发系统。
|
3月前
|
存储 安全 Go
Go 并发编程精粹:掌握通道(channels)的艺术
Go 并发编程精粹:掌握通道(channels)的艺术
|
3月前
|
Go 开发者
深入理解Go语言的通道:概念与使用
【8月更文挑战第31天】
43 0
|
4月前
|
存储 Go
GO通道:无缓冲通道与缓冲通道
GO通道:无缓冲通道与缓冲通道
38 0
|
6月前
|
Go 调度 开发者
Go语言并发基础:轻量级线程与通道通信
【2月更文挑战第6天】本文介绍了Go语言在并发编程方面的基础知识和核心概念。我们将深入探讨goroutine(轻量级线程)的创建与调度,以及如何利用channel进行goroutine间的通信与同步。此外,还将简要提及select语句的使用,并解释其在处理多个channel操作时的优势。
|
6月前
|
安全 Go
无缓冲通道:Go语言同步之道
无缓冲通道:Go语言同步之道
68 0