• 이 글은 골든래빗 《Tucker의 Go 언어 프로그래밍》의 10장 써머리입니다.
func manin() { a := 3 switch a { // a : 비굣값 case 1 : // 비굣값과 1 (case 값)이 같을 때 fmt.Println("a == 1") // 수행하는 문장 case 2 : // 비굣값과 2 (case 값)이 같을 때 fmt.Println("a == 2") // 수행하는 문장 case 3 : // 비굣값과 3 (case 값)이 같을 때 fmt.Println("a == 3") // 수행하는 문장 default: // 해당하는 case 값이 없을 때 (default는 생략가능) fmt.Println("a > 3") // 수행하는 문장 } } // 콘솔 : a==3 출력
- 각 값은 쉼표(,) 로 구분
func main(){ day := "thurseday" switch day { case "monday", "tuesday" : // 쉼표로 구분하여 여러 값을 비교 fmt.Println("수업이 있는 날 입니다") case "wednesday", "thursday", "friday": fmt.Println("실습이 있는 날 입니다") } } // 콘솔 : 실습이 있는 날입니다
- if 문과 같이 true 조건문 검사 가능
해당 case의 조건에 true이면 수행 문 실행func main(){ temp := 18 switch true { case temp < 10, temp > 30: fmt.Println("바깥 활동하기 좋은 날씨가 아닙니다") case temp >= 10 && temp < 20 : // temp 18 이 해당 case 값을 만족하여 fmt.Println("약간 추울 수 있습니다") // 로직이 실행되고 종료. // 아래 조건들은 검사하지 않는다. case temp >= 15 && temp < 25 : fmt.Println("야외 활동하기 좋은 날씨입니다") default : fmt.Println("따뜻합니다") } } // 콘솔 : 약간 추울 수 있습니다
- switch 다음에 비굣값을 적지 않는 경우 : default 값으로 true 사용
switch true { ... } // 아래와 같이 줄여 쓰기 가능 (true 생략) switch { ... }
- 초기문 작성 가능 (if문과 같은 구조)
sitch 초기문; 비굣값 { case 값1 : ... case 값2 : ... default: }
- 예제 1
func getMyAge() int { return 22 } func main() { // age := getMyAge(); : 초기문; age : 비굣값 switch age := getMyAge(); age { // getMyAge() 결괏값 비교 case 10 : fmt.Println("10대") case 30: fmt.Println("30대") default: fmt.Println("내 나이는", age) // age 값 사용 } fmt.Println("switch문 밖의 age", age) // 콘솔 : undefined로 출력 -> 비굣값 변수 age : switch문 안에서만 사용 // (에러 - age 변수 사라짐) }
- 초기문으로 age 값 초기화, 비굣값을 true로 조건문 작성
func getMyAge() int { return 22 } func main() { // age := getMyAge(); : 초기문; true 인 case 찾기 switch age := getMyAge(); true { // age 변수 선언 및 초기화 // 이렇게 쓸 수 있다 -> switch age := getMyAge();{ true는 생략 가능 case age < 20 : fmt.Println("10대") case age < 30: fmt.Println("20대") default: fmt.Println("내 나이는", age) // true 조건 달성 } } // 콘솔 출력 : 20대
const 열거값에 따른 수행 로직을 siwtch문으로 작성할 수 있다
type ColorType int // ColorType 선언 및 상수 const 열거값 정의 const ( Red ColorType = iota Blue Green ) // 열거값에 따라 문자열을 반환하는 switch문 func colorToString(color ColorType) string{ sitch color { case Red : return "Red" case Blue : return "Blue" case Green : return "Green" default : return "Undefined" } } func main(){ fmt.Println("My Color is",colorToString(Blue)) } // 콘솔 출력 : My Color is Blue
- break를 사용하지 않아도 case 하나 실행 후 자동으로 switch문 종료
(Go언어 특성)func main(){ a := 3 switch a { case 1: fmt.Println("a == 1") break case 2: fmt.Println("a == 2") case 3: fmt.Println("a == 3") // break 없어도 알아서 실행 후 종료 case 4: fmt.Println("a == 4") default: fmt.Println("a > 4") } } // 콘솔 출력 : a == 3
- case 실행 후 다음 case 문까지 실행할 때 사용
func main(){ a := 3 switch a { case 1: fmt.Println("a == 1") break case 2: fmt.Println("a == 2") case 3: fmt.Println("a == 3") fallthrough // 다음 case문까지 이어서 실행 case 4: fmt.Println("a == 4") default: fmt.Println("a > 4") } } // 콘솔 출력 : a == 3 // a == 4