以下代碼等待“結(jié)果”通道為空,然后 DEFAULT 分支中斷到 Label DONE。現(xiàn)在的問題是:為什么這會破壞 FOR 循環(huán)?似乎 FOR 循環(huán)會繼續(xù)跳到 DEFAULT 并且永遠不會結(jié)束。是什么打破了 for 循環(huán)。輸出如下:中斷完成結(jié)束于...DONE:for { select { // Nonblocking case result := <-results: fmt.Printf("%s:%d:%s\n", result.filename, result.lino, result.line) default: fmt.Println("Break DONE") break DONE } fmt.Println("END Select")}fmt.Println("End For")
3 回答

GCT1015
TA貢獻1827條經(jīng)驗 獲得超4個贊
break DONE
與goto DONE
C 或其他語言不同。標簽標記 for 循環(huán),哪個break DONE
語句在執(zhí)行時將終止。它不會跳轉(zhuǎn)到DONE
標簽,它會終止標有DONE
標簽的 for 循環(huán)。當您想從嵌套循環(huán)中中斷或者像在您的情況下一樣從 select 內(nèi)部終止循環(huán)時,標記的中斷非常有用。沒有標簽中斷只會終止選擇。

夢里花落0921
TA貢獻1772條經(jīng)驗 獲得超6個贊
如果有一個標簽,它必須是一個封閉的“for”、“switch”或“select”語句的標簽,它就是執(zhí)行終止的那個。
https://golang.org/ref/spec#Break_statements
此示例中的標簽明確標記要終止的“for”。

守著一只汪
TA貢獻1872條經(jīng)驗 獲得超4個贊
使用break關(guān)鍵字終止執(zhí)行,當你調(diào)試這段代碼時,默認選項會被選中,然后break關(guān)鍵字執(zhí)行停止程序。程序?qū)o法進入 DONE 標簽
- 3 回答
- 0 關(guān)注
- 327 瀏覽
添加回答
舉報
0/150
提交
取消