go - 选择完成后,这个 FOR 循环如何中断

标签 go

以下代码等待“结果” channel 为空 然后 DEFAULT 分支中断到 Label DONE。

现在的问题是:为什么这会破坏 FOR 循环??它似乎 FOR 循环将继续跳到 DEFAULT 并且永远不会 结束。

什么打破了 FOR 循环。

输出如下:

中断完成

结束于


...
DONE:
for {
    select { // Nonblocking
    case result := <-results:
        fmt.Printf("%s:%d:%s\n", result.filename, result.lino,
            result.line)
    default:
        fmt.Println("Break DONE")
        break DONE
    }
    fmt.Println("END Select")
}
fmt.Println("End For")

最佳答案

break DONE 与 C 或其他语言中的 goto DONE 不同。该标签标记了 break DONE 语句在执行时将终止的 for 循环。它不会跳转到 DONE 标签,它会终止标有 DONE 标签的 for 循环。当您想从嵌套循环中中断,或者像您的情况一样,从 select 内部终止循环时,标记的中断非常有用。没有标签中断只会终止选择。

关于go - 选择完成后,这个 FOR 循环如何中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35445630/

相关文章:

go - 为什么 golang time.Equal 中没有定位人员?

unit-testing - 在 Go 中模拟接收函数

performance - go rpc、http 或 websockets,这是将许多小块数据从一个服务器重复传输到另一个服务器的最快方式

C 回调和非 Go 线程

networking - 如何获取 (IPv4) net.IPNet 的广播地址?

go - 键入断言嵌套接口(interface)

c++ - 使用公钥 : BER decode error 加密消息

go - 使用 protoc-gen-go 创建一个 .pb.go 导入 google/golang 但找不到包

go - 如何在golang中初始化嵌套结构?

go - 在 Go 中,如何将函数的标准输出捕获到字符串中?