直接从一个频道发送到另一个频道
Sending directly from one channel to another
当我从一个频道直接发送到另一个频道时,我偶然发现了令人惊讶的行为:
package main
import (
"fmt"
)
func main() {
my_chan := make(chan string)
chan_of_chans := make(chan chan string)
go func() {
my_chan <- "Hello"
}()
go func() {
chan_of_chans <- my_chan
}()
fmt.Println(<- <- chan_of_chans)
}
我希望 <- my_chan
发送 "Hello"
类型 string
。但是,它发送类型 chan string
并且我的代码运行正常。这意味着发送的内容(string
或 chan string
)取决于接收方的类型。
我尝试了天真的谷歌搜索,但由于我不熟悉正确的术语,所以我一无所获。是否有与上述行为相关的适当术语?当然,任何额外的见解都很棒。
我不是 100% 确定我理解这个问题,但让我们试一试。
考虑这一行:
chan_of_chans <- my_chan
您实际上在做的是将 my_chan
推入频道,而不是从 my_chan
中删除某些内容并将其推入 chan_of_chans
。
如果你想从 my_chan
中提取一些东西并将它发送到另一个频道,你需要在没有 space 的频道之前使用 <-
运算符来提取它:
value := <-my_chan
other_chan <- value
或者,这应该有效:
other_chan <- (<-my_chan)
当我从一个频道直接发送到另一个频道时,我偶然发现了令人惊讶的行为:
package main
import (
"fmt"
)
func main() {
my_chan := make(chan string)
chan_of_chans := make(chan chan string)
go func() {
my_chan <- "Hello"
}()
go func() {
chan_of_chans <- my_chan
}()
fmt.Println(<- <- chan_of_chans)
}
我希望 <- my_chan
发送 "Hello"
类型 string
。但是,它发送类型 chan string
并且我的代码运行正常。这意味着发送的内容(string
或 chan string
)取决于接收方的类型。
我尝试了天真的谷歌搜索,但由于我不熟悉正确的术语,所以我一无所获。是否有与上述行为相关的适当术语?当然,任何额外的见解都很棒。
我不是 100% 确定我理解这个问题,但让我们试一试。
考虑这一行:
chan_of_chans <- my_chan
您实际上在做的是将 my_chan
推入频道,而不是从 my_chan
中删除某些内容并将其推入 chan_of_chans
。
如果你想从 my_chan
中提取一些东西并将它发送到另一个频道,你需要在没有 space 的频道之前使用 <-
运算符来提取它:
value := <-my_chan
other_chan <- value
或者,这应该有效:
other_chan <- (<-my_chan)