一個(gè)select語句用來選擇哪個(gè)case中的發(fā)送或接收操作可以被立即執(zhí)行袁勺。它類似于switch語句,但是它的case涉及到channel有關(guān)的I/O操作,阻塞監(jiān)聽IO操作
在項(xiàng)目中我們可能需要無限監(jiān)聽某個(gè)IO操作澎粟,在滿足條件后跳出操作。如:
tick := time.NewTicker(2 * time.Second)
var a int
for {
select {
case <-tick.C:
a++
if a > 2 {
break
}
}
time.Sleep(time.Second * 1)
fmt.Println("循環(huán)還在執(zhí)行")
}
可能有人覺得欢瞪,break會直接打破循環(huán)活烙,跳出循環(huán)執(zhí)行。但當(dāng)執(zhí)行的時(shí)候遣鼓,卻發(fā)現(xiàn)程序在持續(xù)輸出"循環(huán)還在執(zhí)行"啸盏。這是因?yàn)閎reak僅與select有關(guān)而與for無關(guān)。
跳出循環(huán)骑祟,執(zhí)行指定操作的辦法 goto
tick := time.NewTicker(2 * time.Second)
var a int
for {
select {
case <-tick.C:
a++
if a > 2 {
goto exit
}
}
}
exit:
fmt.Println("退出循環(huán)了")