登录
首页 >  Golang >  Go问答

chanA <- chanB :发送和接收值或发送通道本身?

来源:stackoverflow

时间:2024-04-17 19:54:37 461浏览 收藏

哈喽!今天心血来潮给大家带来了《chanA ,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

Go 编译器似乎会根据以下示例中的类型执行两种完全不同的语义操作:

chanA <- chanB

如果 chanA 的类型为 (chan chan<- string),则此操作会将类型 (chan<- string) 的 chanB 本身发送给 chanA。

但是,如果 chanA 的类型是 (chan<- string),它将尝试从 chanB 中提取字符串,这意味着 chanB 的类型是 (<-chan string)。

这是了解类型的唯一推理方法,还是有一种简单的方法可以判断通道何时发送值及其自身?

我正在查看 Go 编程书中的这个示例:https://github.com/adonovan/gopl.io/blob/master/ch8/chat/chat.go


解决方案


这很容易分辨。

chana <- anything

正在 chana 上发送值 anything,无论 anything 是什么。

chana <- <- chanb

正在从 chanb 接收值并将其发送到 chana

您的第二个声明:

但是,如果 chana 的类型为 (chan<- string),它将尝试从 chanb 中提取字符串

是你的问题。 foo <- bar始终是发送操作。 go编译器从左到右读取,identifier <-是发送操作。

接收操作是一个计算结果为值的表达式,因此它只能在值有效的情况下才有效 - 即,编译器必须已经遇到赋值操作、发送操作、函数调用的第一部分,等等。

你的假设是错误的。

chana <- chanb

仅当 chana 的类型为 chan chan something 时,上述内容才有效。它将通过 chana 发送 chanb。它不会从 chanb 读取。

要从 chanb 读取值并将其通过 chana 发送,您需要:

chana <- <- chanb

终于介绍完啦!小伙伴们,这篇关于《chanA

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>