Today
-
Yesterday
-
Total
-
  • Go : Switch 조건문
    Language/고 Go 2023. 12. 17. 00:01

    출처 : https://inf.run/tfefs

    구조

    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

Designed by Tistory / Custom by 얼거스