Go에서 break 문은 스위치 / 선택에서 끊어 집니까?


144

모든 경우에 switch/ select문이 자동으로 중단 된다는 것을 알고 있습니다. 다음 코드에서 궁금합니다.

for {
    switch sometest() {
    case 0:
        dosomething()
    case 1:
        break
    default:
        dosomethingelse()
    }
}

break명령문이 for루프 또는 switch블록을 종료 합니까 ?

답변:


199

Go 문언 언어 사양.

"break"문은 가장 안쪽 "for", "switch"또는 "select"문의 실행을 종료합니다.

BreakStmt = "break" [ Label ] .

레이블이있는 경우 레이블은 "for", "switch"또는 "select"문으로 묶어야하며, 실행이 종료되는 문이어야합니다 (§For 문, §Switch 문, §Select 문).

L:
  for i < n {
      switch i {
      case 5:
          break L
      }
  }

따라서 break예제의 switch명령문은 "가장 안쪽"명령문을 종료합니다 .


4
하나만 선택할 수 있기 때문에 breakwithin 의 사용 사례는 무엇입니까 ? select {}case
Julio Guerra

3
단일 사례를 선택하더라도 함수의 어느 곳에서나 리턴 할 수있는 것처럼 break를 사용하여 사례 실행을 종료하는 더 긴 구현이있을 수 있습니다.
Tit Petric

나쁜 일이 아닐까요? 문에 이동 나쁜 종로, 및 스위치이기 때문에 / 선택 문이 자동으로 중단
존 Balvin 아리아

55

희망적으로 예시적인 예 :

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()
// ....

14

예, 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.


2

이것을 설명해야합니다.

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를 인쇄 할 것입니까?

http://play.golang.org/p/GOvnfI67ih


3
흠, 나는 go play 링크를 포함 시켰는데 도움이 될 것이다.
Jasmeet Singh

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.