1 回答

TA贡献1858条经验 获得超8个赞
您可以将select
语句放入循环中for
(这是语言规范中的示例之一)。与循环不同for...range
,这将让您从两个通道读取。如果其中一个通道关闭,它也不会自动终止。当您从关闭的通道接收时,关闭的通道始终准备好接收并始终产生零值,并且它有一个二值形式告诉您通道是否打开。
你的功能可能看起来像
func HandleStuff(numbers <-chan int, signals <-chan os.Signal) {
var goingToExit bool
for {
select {
case n := <-numbers:
if n == 0 {
fmt.Printf("zero\n")
} else if n == 1 {
goingToExit = true
}
case sig, ok := <-signals:
if !ok { // the channel is closed
return
} else if goingToExit {
os.Exit(0)
}
}
}
}
- 1 回答
- 0 关注
- 92 浏览
添加回答
举报