Go : Switch 조건문

김아무개·2023년 10월 22일
0

고 Go

목록 보기
7/13

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

profile
Hello velog! 

0개의 댓글