直接从一个频道发送到另一个频道

Aka*_*all 2 channel go

当我从一个频道直接发送到另一个频道时,我偶然发现了我发现的惊人行为:

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)
}
Run Code Online (Sandbox Code Playgroud)

去游乐场

我期望<- my_chan发送"Hello"类型string.但是,它发送类型chan string,我的代码运行正常.这意味着发送(stringchan string)发送的内容取决于接收器的类型.

我尝试了天真的谷歌搜索,但由于我不熟悉正确的术语,我什么也没想到.是否有与上述行为相关的适当术语?任何额外的见解当然都很棒.

rob*_*rit 9

我不是100%肯定我理解这个问题,但让我们试一试.

考虑这一行:

chan_of_chans <- my_chan
Run Code Online (Sandbox Code Playgroud)

你实际上正在做的是推进my_chan通道,而不是从中取出my_chan并将其推入chan_of_chans.

如果你想从中提取某些东西my_chan并将其发送到另一个频道,你需要<-在没有空格的频道之前使用操作员来提取它:

value := <-my_chan
other_chan <- value
Run Code Online (Sandbox Code Playgroud)

或者,这应该工作:

other_chan <- (<-my_chan)
Run Code Online (Sandbox Code Playgroud)