为了账号安全,请及时绑定邮箱和手机立即绑定

通道是否返回两个值?

通道是否返回两个值?

Go
阿晨1998 2021-04-26 16:15:34
我在此链接中看到了一些代码,并感到困惑:http : //www.darkcoding.net/software/go-lang-after-four-months/第二个值(确定)是什么意思?for self.isRunning {    select {    case serverData, ok = <-fromServer:   // What's the meaning of the second value(ok)?        if ok {            self.onServer(serverData)        } else {            self.isRunning = false        }    case userInput, ok = <-fromUser:        if ok {            self.onUser(userInput)        } else {            self.isRunning = false        }    }}
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

有两个答案引用了receive运算符上的规范,但是要了解您可能还需要阅读关于close函数的规范。然后,由于您会想知道这些功能为何如此,请阅读for语句在通道上的范围。for语句需要一个信号来停止迭代,这close是发送方可以说“没有更多数据”的方式。

随着close, ok = <-暴露为语言的一部分,你可以当你想发送的goroutine到信号“没有更多的数据”用它们在其他情况下。问题中的示例代码是这些功能的有趣用法。它同时处理一个“服务器”通道和“用户”通道,如果一个“没有更多数据”信号从到达任何人,它打破了循环出来。


查看完整回答
反对 回复 2021-05-10
  • 3 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信