猿问

“<-chan”和“chan”作为函数返回类型有什么区别?

Golang新手在这里。

两者之间是否存在功能差异

func randomNumberGenerator() <-chan int {

func randomNumberGenerator() chan int {

我试过同时使用两者,它们似乎对我来说效果很好。

我在 Google IO 2012 的 Go Concurrency Patterns 演讲中看到 Rob Pike(Go 的创造者之一)使用的前者。我也在 Go 的官方网站上看到了它。当您可以省略它时,为什么要添加 2 个额外的字符(“<-”)?我试过在网上寻找差异,但找不到。


陪伴而非守候
浏览 165回答 2
2回答

呼唤远方

两者确实会起作用。但一个会受到更多限制。箭头指向远离chan关键字的形式意味着返回的通道只能由客户端代码拉出。不允许推送:推送将由随机数生成器函数完成。相反,还有第三种形式,箭头指向chan,使所述通道对客户端只写。chan&nbsp; &nbsp;// read-write<-chan // read onlychan<- // write only这些添加的约束可以改进意图的表达并收紧类型系统:尝试将内容强制放入只读通道会导致编译错误,尝试从只写通道读取也会如此。这些约束可以在返回类型中表达,但它们也可以是参数签名的一部分。像 :func log(<-chan string) { ...在那里,您可以仅通过签名知道该log函数将使用来自通道的数据,而不会向其发送任何数据。

达令说

这是仅接收通道的示例。可选<-运算符指定通道方向,发送或接收。如果没有给出方向,则通道是双向的。通道可能被限制为只能发送或只能通过转换或分配接收。告诉 API 的用户他们应该只从那个频道接收而不发送是很有用的,否则会发生不好的事情。在公共 API 中指定通道的方向被认为是一种很好的做法。
随时随地看视频慕课网APP

相关分类

Go
我要回答