【发布时间】:2012-05-13 07:13:04
【问题描述】:
我在这个链接里看到了一些代码,一头雾水:http://www.darkcoding.net/software/go-lang-after-four-months/
第二个值(ok)是什么意思?
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
}
}
}
【问题讨论】:
-
在我看来这是一个过于沉重的结构。使用 select,我认为没有必要获取 ok 布尔值。还是我错过了什么?
-
它们是正交的。通道接收操作中的“ok”表示通道是否关闭。 Select 只是等到它的至少一个 case 可以运行,然后随机选择一个而不考虑 channel 是否关闭。默认情况下使其非阻塞。