通道是否返回两个值?

我在此链接中看到了一些代码,并感到困惑: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

        }

    }


}


阿晨1998
浏览 229回答 3
3回答

泛舟湖上清波郎朗

有两个答案引用了receive运算符上的规范,但是要了解您可能还需要阅读关于close函数的规范。然后,由于您会想知道这些功能为何如此,请阅读for语句在通道上的范围。for语句需要一个信号来停止迭代,这close是发送方可以说“没有更多数据”的方式。随着close和, ok = <-暴露为语言的一部分,你可以当你想发送的goroutine到信号“没有更多的数据”用它们在其他情况下。问题中的示例代码是这些功能的有趣用法。它同时处理一个“服务器”通道和“用户”通道,如果一个“没有更多数据”信号从到达任何人,它打破了循环出来。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go