2.3.2 switch
switch 값 { case 조건1: … case 조건2: … default: … }
if 문과 마찬가지로 여는 괄호({)는 switch와 같은 줄에 있어야 한다. switch 문은 첫 번째 case의 조건부터 차례로 비교하다가 조건이 일치하는 case의 구문을 수행하고 switch 문을 종료한다. case에는 값을 하나 이상 쓸 수 있다. 값을 둘 이상 쓸 때는 콤마(,)로 구분해준다.
switch i { case -1, -2: fmt.Println(i, "는 음수입니다.") case 1, 2: fmt.Println(i, "는 양수입니다.") }
일치하는 case 조건을 만나면 바로 switch 문을 빠져나오므로 switch 문에는 break를 쓰지 않아도 된다. 일치하는 조건을 만났지만 switch 문을 빠져나오지 않고 다음 case로 넘어가려면 fallthrough를 표기해야 한다.
switch i { case 0: // i가 0일 때 아무것도 수행하지 않음 case 1: // i가 1일 때만 수행함 f() } switch i { case 0: fallthrough case 1: // i가 0일 때와 1일 때 모두 수행함 f() }
다음은 fallthrough를 사용한 코드와 사용하지 않은 코드의 차이다.
▼ fallthrough를 사용하지 않음
package main import "fmt" func main() { i := 2 switch i { case 1: fmt.Println("i는 1입니다.") case 2: fmt.Println("i는 2입니다.") case 3: fmt.Println("i는 3입니다.") } }
실행 결과
i는 2입니다.
▼ fallthrough를 사용함
package main import "fmt" func main() { i := 2 switch i { case 1: fmt.Println("i는 1보다 작거나 같습니다.") fallthrough case 2: fmt.Println("i는 2보다 작거나 같습니다.") fallthrough case 3: fmt.Println("i는 3보다 작거나 같습니다.") } }
실행 결과
i는 2보다 작거나 같습니다.
i는 3보다 작거나 같습니다.