Golang新手在这里。两者之间是否存在功能差异func randomNumberGenerator() <-chan int {和func randomNumberGenerator() chan int {我试过同时使用两者,它们似乎对我来说效果很好。我在 Google IO 2012 的 Go Concurrency Patterns 演讲中看到 Rob Pike(Go 的创造者之一)使用的前者。我也在 Go 的官方网站上看到了它。当您可以省略它时,为什么要添加 2 个额外的字符(“<-”)?我试过在网上寻找差异,但找不到。
2 回答
呼唤远方
TA贡献1856条经验 获得超11个赞
两者确实会起作用。但一个会受到更多限制。箭头指向远离chan关键字的形式意味着返回的通道只能由客户端代码拉出。不允许推送:推送将由随机数生成器函数完成。相反,还有第三种形式,箭头指向chan,使所述通道对客户端只写。
chan // read-write
<-chan // read only
chan<- // write only
这些添加的约束可以改进意图的表达并收紧类型系统:尝试将内容强制放入只读通道会导致编译错误,尝试从只写通道读取也会如此。这些约束可以在返回类型中表达,但它们也可以是参数签名的一部分。像 :
func log(<-chan string) { ...
在那里,您可以仅通过签名知道该log函数将使用来自通道的数据,而不会向其发送任何数据。
达令说
TA贡献1821条经验 获得超6个赞
这是仅接收通道的示例。
可选
<-
运算符指定通道方向,发送或接收。如果没有给出方向,则通道是双向的。通道可能被限制为只能发送或只能通过转换或分配接收。
告诉 API 的用户他们应该只从那个频道接收而不发送是很有用的,否则会发生不好的事情。在公共 API 中指定通道的方向被认为是一种很好的做法。
- 2 回答
- 0 关注
- 164 浏览
添加回答
举报
0/150
提交
取消