-
Go : Switch 조건문Language/고 Go 2023. 12. 17. 00:01
구조
switch Expression { case condition: // code case condition: // code default: // code }
특징 1. switch 절에 Expression 생략 가능
특징 2. case 절에 expression 사용 가능
특징 3. switch와 case의 들여쓰기 깊이가 같아야 함
예제 1
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, "은(는) 양수") } }
예제 2
공식문서에 의하면 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, "은(는) 양수") } }
예제 3
문자열을 switch 로 비교할 때는 다음과 같이 사용할 수 있다.
func main() { switch c := "go"; c { case "go": fmt.Println("Go !") case "java": fmt.Println("Java !") default: fmt.Println(c, " !") } }
예제 4
문자열 비교 응용
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, " !") } }
예제 5
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보다 크다") } }
예제 6
랜덤 함수를 사용해서 난수를 얻어서 활용하는 예제
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);
- 0 ~ 99 범위에서 임의의 수를 생성한다.
특징 4. 자동 break로 인한 fallthrouth 존재
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 ! 파이썬 ! 코틀린 !
'Language > 고 Go' 카테고리의 다른 글
Go : package (0) 2023.12.17 Go : for 반복문 (0) 2023.12.17 Go : if 조건문 (0) 2023.12.17 Go : 열거형 상수 (0) 2023.12.17 Go : 자료형 및 변수, 상수 (0) 2023.12.17 -