switch Expression {
case condition:
// code
case condition:
// code
default:
// code
}
func main() {
a := -7
switch { // expression 생략
case a < 0: // expression 사용
fmt.Println(a, "은(는) 음수")
case a == 0:
fmt.Println(a, "은(는) 0")
case a > 0:
fmt.Println(a, "은(는) 양수")
}
}
공식문서에 의하면
go 에서 switch문에 사용할 변수를 생성할 때는
예제1 처럼 switch문 밖에서 선언하는것 보다
아래와 같이 Expression 위치에서 선언하는 것을 선호한다고 한다.
func main() {
switch b := 27; {
case b < 0:
fmt.Println(b, "은(는) 음수")
case b == 0:
fmt.Println(b, "은(는) 0")
case b > 0:
fmt.Println(b, "은(는) 양수")
}
}
문자열을 switch 로 비교할 때는
다음과 같이 사용할 수 있다.
func main() {
switch c := "go"; c {
case "go":
fmt.Println("Go !")
case "java":
fmt.Println("Java !")
default:
fmt.Println(c, " !")
}
}
문자열 비교 응용
func main() {
switch c := "go"; c + "lang" {
case "go":
fmt.Println("Go !")
case "golang":
fmt.Println("Golang !")
case "java":
fmt.Println("Java !")
default:
fmt.Println(c, " !")
}
}
Expression에서 변수를 여러개 선언할 수도 있다.
func main() {
switch i, j := 20, 30; {
case i < j:
fmt.Println("i는 j보다 작다")
case i == j:
fmt.Println("i는 j와 같다")
case i > j:
fmt.Println("i는 j보다 크다")
}
}
랜덤 함수를 사용해서 난수를 얻어서 활용하는 예제
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.New(rand.NewSource(time.Now().UnixNano()))
switch i := rand.Intn(100); {
case i >= 50 && i < 100:
fmt.Println("i -> ", i, " , 50 이상 100 미만")
case i >= 25 && i < 50:
fmt.Println("i -> ", i, " , 25 이상 50 미만")
default:
fmt.Println("i -> ", i, " , 25 미만")
}
}
rand.New(rand.NewSource(time.Now().UnixNano()))
랜덤 씨드를 현재 유닉스 나노 시간으로 설정하여
실행시 마다 난수 생성에 변화를 줌
더 안전한 예측하기 힘든 난수를 생성하고 싶다면
crypt/rand 패키지를 사용해야 한다. 👉 참고
i := rand.Intn(100);
Golang에서 switch구문은 case 조건절이 일치하는 경우
해당 case를 실행하고 다음 case를 만나면 자동으로 break가 된다.
하지만 case절의 마지막 줄에 fallthrouth를 선언하면
다음 case 구문의 조건이 일치하던 하지 않던 실행하게 된다.
fallthrougth는 다음 case구문을 실행하는 키워드이기 때문에
마지막 case 구문에선 사용할 수 없다.
func main() {
switch e := "go"; e {
case "java":
fmt.Println("자바!")
fallthrough
case "go":
fmt.Println("고!")
fallthrough
case "js":
fmt.Println("자바스크립트!")
fallthrough
case "php":
fmt.Println("php !")
fallthrough
case "python":
fmt.Println("파이썬 !")
fallthrough
case "kotlin":
fmt.Println("코틀린 !")
}
}
실행 결과
고!
자바스크립트!
php !
파이썬 !
코틀린 !