go - 直接从一个 channel 发送到另一个 channel

标签 go channel

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

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)
}

Go Playground

我预计 <- my_chan发送"Hello"输入 string .但是,它发送类型 chan string我的代码运行良好。这意味着发送的内容(stringchan string)取决于接收方的类型。

我尝试了天真的谷歌搜索,但由于我不熟悉正确的术语,所以我一无所获。是否有与上述行为相关的适当术语?当然,任何额外的见解都很棒。

最佳答案

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

考虑这一行:

chan_of_chans <- my_chan

你实际上在做的是插入 my_chan进入 channel ,而不是从 my_chan 中删除某些内容并将其插入 chan_of_chans .

如果你想从my_chan中提取一些东西并将其发送到另一个 channel ,您需要使用 <- 提取它 channel 前没有空格的运算符:

value := <-my_chan
other_chan <- value

或者,这应该有效:

other_chan <- (<-my_chan)

关于go - 直接从一个 channel 发送到另一个 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35966277/

相关文章:

go - 无法获取工作 channel 图

go - Golang中使用database/sql包调用QueryRow方法超时

Go 系统调用 EnumProcessModules

sorting - Golang 自定义排序比原生排序更快

multithreading - 无法连接时停止 channel

go - 使用 channel 或 sync.Cond 等待条件

javascript - appengine channel 没有消息到达

ssl - 非自签名证书给出由未知授权错误签名的证书

git - 如何将 Go 与私有(private) GitLab 存储库一起使用

javascript - channel 网址