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 !
파이썬 !
코틀린 !