我在这个链接中看到了一些代码,我搞混了:http://www.darkcoding.net/software/go-lang-after-four-months/

第二个值(OK)是什么意思?

for self.isRunning {

    select {
    case serverData, ok = <-fromServer:   // 第二个值(OK)是什么意思?
        if ok {
            self.onServer(serverData)
        } else {
            self.isRunning = false
        }

    case userInput, ok = <-fromUser:
        if ok {
            self.onUser(userInput)
        } else {
            self.isRunning = false
        }
    }

}

推荐答案

receive operator返回的布尔变量ok指示所接收的值是在信道上发送的(真)还是因为信道关闭而为空而返回的零值(假).

当围棋程序的某个其他部分关闭fromServerfromUser频道时,for循环终止.在这种情况下,CASE语句之一将设置ok为TRUE.因此,如果用户关闭连接或远程服务器关闭连接,程序将终止.

http://play.golang.org/p/4fJDkgaa9O:

package main

import "runtime"

func onServer(i int) { println("S:", i) }
func onUser(i int)   { println("U:", i) }

func main() {
    fromServer, fromUser := make(chan int),make(chan int)
    var serverData, userInput int
    var ok bool

    go func() {
        fromServer <- 1
        fromUser <- 1
        close(fromServer)
        runtime.Gosched()
        fromUser <- 2
        close(fromUser)
    }()

    isRunning := true
    for isRunning {
        select {
            case serverData, ok = <-fromServer:
                if ok {
                    onServer(serverData)
                } else {
                    isRunning = false
                }

            case userInput, ok = <-fromUser:
                if ok {
                    onUser(userInput)
                } else {
                    isRunning = false
                }
            }
        }
        println("end")
}

Go相关问答推荐

JWT库返回及时无效的令牌有效

如何获得与cksum相同的CRC 32?

Makefile:现有文件上没有这样的文件或目录,不加载环境变量

如何将泛型函数作为参数传递给golang中的另一个函数?

在Golang中,@LATEST和@UPGRADE特殊查询有什么不同?

Golang html/模板&需要错误数量的参数1在模板中使用';调用';获得0&q;

Go在使用HTTP代理时如何处理DNS请求?

验证访问令牌(密钥罩)

如何在Golang中使用ECHO服务器实现Socket.IO服务器

通过渠道和goroutines增值1000倍

在VSCode中如何使用特定的文件名提供编译命令

使用Goldmark在golang中添加ChildNode会导致堆栈溢出

使用反射在Go中递归迭代 struct 体和集合字段

我的神经网络(从头开始)训练,让它离目标更远

如何在时间范围内规范化数组的元素?

如何使用struct的方法清除除某些字段之外的struct值

同时调用应该只获取一次数据

gopls 为 github.com/Shopify/sarama 返回错误gopls: no packages returned: packages.Load error

Scanner.Buffer - 最大值对自定义拆分没有影响?

Go/Golang:如何从 big.Float 中提取最低有效数字?