我知道switch
/select
報表每個案例後自動斷線。我想知道,下面的代碼:在Go中,斷開語句是否與switch/select斷開?
for {
switch sometest() {
case 0:
dosomething()
case 1:
break
default:
dosomethingelse()
}
}
是否break
聲明退出for
循環或只是switch
塊?
我知道switch
/select
報表每個案例後自動斷線。我想知道,下面的代碼:在Go中,斷開語句是否與switch/select斷開?
for {
switch sometest() {
case 0:
dosomething()
case 1:
break
default:
dosomethingelse()
}
}
是否break
聲明退出for
循環或只是switch
塊?
Break statements, The Go Programming Language Specification.
「中斷」 語句終止最內層的 「for」, 「開關」 或執行 「select」 語句。
BreakStmt = "break" [ Label ] .
如果有一個標籤,它必須是「換」,「開關」 或一個封閉的「選擇」的聲明,那就是它的執行終止 (§For陳述,§Switch一報表,選擇報表)。
L: for i < n { switch i { case 5: break L } }
因此,在您的示例break
語句終止switch
聲明中, 「最內層」 的聲明。
它只退出開關塊。
只是從一個開關塊。 Golang自己的代碼中有很多可以檢查的例子(比較inner break和outer break)。
都被斷開的鏈接 –
@lukewendling固定的,謝謝你注意到,。 – raina77ow
甲希望說明性示例:
loop:
for {
switch expr {
case foo:
if condA {
doA()
break // like 'goto A'
}
if condB {
doB()
break loop // like 'goto B'
}
doC()
case bar:
// ...
}
A:
doX()
// ...
}
B:
doY()
// ....
我相信這行代碼:break loop //像'goto B' – Jerred
這應該解釋一下。
for{
x := 1
switch {
case x >0:
fmt.Println("sjus")
case x == 1:
fmt.Println("GFVjk")
default:
fmt.Println("daslkjh")
}
}
}
一直運行
for{
x := 1
switch {
case x >0:
fmt.Println("sjus")
break
case x == 1:
fmt.Println("GFVjk")
default:
fmt.Println("daslkjh")
}
}
}
同樣,一直運行
但
package main
import "fmt"
func main() {
d:
for{
x := 1
switch {
case x >0:
fmt.Println("sjus")
break d
case x == 1:
fmt.Println("GFVjk")
default:
fmt.Println("daslkjh")
}
}
}
將打印sjus ......明白了嗎?
是,break
符內switch
。操場的另一個複製/粘貼:
https://play.golang.org/p/SZdDuVjic4
package main
import "fmt"
func main() {
myloop:for x := 0; x < 7; x++ {
fmt.Printf("%d", x)
switch {
case x == 1:
fmt.Println("start")
case x == 5:
fmt.Println("stop")
break myloop
case x > 2:
fmt.Println("crunching..")
break
default:
fmt.Println("idling..")
}
}
}
0idling.. 1start 2idling.. 3crunching.. 4crunching.. 5stop Program exited.
另一個用途爲開關破與下通語句組合。它可能需要一定的創造力才能在正確的情況下正確使用它,但它可能是一個可用的組合。
下面是簡單的例子:
a := 25
fallThrough := true
switch {
case a > 10 :
fmt.Println("a>10")
if fallThrough != true {
break
}
fallthrough
case a > 20:
fmt.Println("a>20")
}
'select {}'中'break'的用例是什麼,因爲只能選擇一個'case'? –
因爲即使選擇了一個案例,它也可能有一個更長的實現,它使用break來終止案例的執行,就像你可以從函數的任何地方返回一樣。 –