在没有隐式缓冲区的情况下,如何将值从一个Go通道传输到另一个Go通道?
假设我有一个goroutine,它从一个通道读取数据,然后写入另一个通道在没有隐式缓冲区的情况下,如何将值从一个Go通道传输到另一个Go通道?,go,pipeline,channel,Go,Pipeline,Channel,假设我有一个goroutine,它从一个通道读取数据,然后写入另一个通道 ch1 := make(chan int) ch2 := make(chan int) go func() { for num := range ch1 { ch2 <- num+1 } }() ch1:=make(chan int) ch2:=制造(成交量) go func(){ 对于num:=范围ch1{ ch2您不能使用2个通道执行此操作。要在ch2上执行发送,必须已准备好要发送的值,并对其进
ch1 := make(chan int)
ch2 := make(chan int)
go func() {
for num := range ch1 {
ch2 <- num+1
}
}()
ch1:=make(chan int)
ch2:=制造(成交量)
go func(){
对于num:=范围ch1{
ch2您不能使用2个通道执行此操作。要在ch2
上执行发送,必须已准备好要发送的值,并对其进行评估
在通信开始之前,对通道和值表达式进行求值
因此,即使您这样做,似乎也不会缓冲任何变量中的值:
ch2 <- (<- ch1)
ch2作为一个注释:Rob Pike向Go 2中的频道添加了一个拼接
,这似乎就是为了解决这个问题。最初的拼接方案并没有真正涵盖我想要的内容,但这正是我上面所描述的。除了我不确定他所说的如何重构代码的意思之外。