加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

为什么这个Golang代码不能在多个时间内进行选择.

发布时间:2020-12-16 19:26:45 所属栏目:大数据 来源:网络整理
导读:为什么这个Golang代码不能在多个时间内进行选择. 见下面的代码.永远不会发出“超时”消息.为什么? package mainimport ( "fmt" "time")func main() { count := 0 for { select { case -time.After(1 * time.Second): count++ fmt.Printf("tick %dn",count)
为什么这个Golang代码不能在多个时间内进行选择.

见下面的代码.永远不会发出“超时”消息.为什么?

package main

import (
    "fmt"
    "time"
)

func main() {
    count := 0
    for {
        select {
        case <-time.After(1 * time.Second):
            count++
            fmt.Printf("tick %dn",count)
            if count >= 5 {
                fmt.Printf("ughn")
                return
            }
        case <-time.After(3 * time.Second):
            fmt.Printf("timeoutn")
            return
        }
    }
}

在Playground:http://play.golang.org/p/1gku-CWVAh上运行它

输出:

tick 1
tick 2
tick 3
tick 4
tick 5
ugh
因为time.After是一个函数,所以在每次迭代时它返回一个新的通道.如果您希望此通道对于所有迭代都相同,则应在循环之前保存它:
timeout := time.After(3 * time.Second)
for {
    select {
    //...
    case <-timeout:
        fmt.Printf("timeoutn")
        return
    }
}

游乐场:http://play.golang.org/p/muWLgTxpNf.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读