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 關注
- 111 瀏覽
添加回答
舉報