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)
}
目录
相关文章
|
2天前
|
供应链 Go
掌握Go语言:利用Go语言的单向通道和select语句,提升库存管理效率(21)
掌握Go语言:利用Go语言的单向通道和select语句,提升库存管理效率(21)
|
2天前
|
安全 Go
掌握Go语言:Go语言通道,并发编程的利器与应用实例(20)
掌握Go语言:Go语言通道,并发编程的利器与应用实例(20)
|
2天前
|
安全 Go 数据处理
Go语言CSP编程实战:通道通信技术
Go语言CSP编程实战:通道通信技术
51 0
|
2天前
|
Go
通道多路复用:Go语言并发编程的黄金法则
通道多路复用:Go语言并发编程的黄金法则
42 0
|
2天前
|
安全 Go
Go语言并发新特性:单向通道的读写控制
Go语言并发新特性:单向通道的读写控制
44 0
|
2天前
|
Go 调度 开发者
Go语言并发基础:轻量级线程与通道通信
【2月更文挑战第6天】本文介绍了Go语言在并发编程方面的基础知识和核心概念。我们将深入探讨goroutine(轻量级线程)的创建与调度,以及如何利用channel进行goroutine间的通信与同步。此外,还将简要提及select语句的使用,并解释其在处理多个channel操作时的优势。
|
2天前
|
安全 Go
无缓冲通道:Go语言同步之道
无缓冲通道:Go语言同步之道
39 0
|
2天前
|
Go 开发者
Go语言带缓冲通道:异步通信的艺术
Go语言带缓冲通道:异步通信的艺术
26 0
|
2天前
|
安全 Go
Go语言并发打印:通过通道实现协同输出
Go语言并发打印:通过通道实现协同输出
43 0
|
2天前
|
存储 安全 Go
Go并发之道:通道与Goroutine的完美契合
Go并发之道:通道与Goroutine的完美契合
25 0