Go 的 select 语句的 cases 中有多个代码

Multiple tickers in Go's select statement's cases

当我 运行 下面的 Go 1.18 代码时,我希望看到这两条消息一条接一条地重复打印到标准输出。但是,我只看到重复打印“ping”。为什么? select 语句必须执行这两种情况,因为有两个不同的通道操作,并且通道本身也不同。

for {
    select {
    case <-time.NewTicker(time.Millisecond * 400).C:
        fmt.Println("ping")
    case <-time.NewTicker(time.Millisecond * 600).C:
        fmt.Println("pong")
    }
}

您正在为案例创建一个新的代码。 select 语句首先评估 case,这意味着它创建了两个计时器,在较短的一个计时结束后,它创建了另一对计时器。下次再选矮的。

在 for 循环外创建两个代码。