为什么这个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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |