-
[Golang] 조건문 (if) & Switch문언어/Golang 2020. 2. 9. 16:48
조건문 (if)
파이썬과 동일하게 () 괄호를 사용하지 않아도 되고 조건문의 조건은 반드시 boolean 타입으로 나와야 합니다. Golang에서는 다른 언어와는 다르게 조건문의 코드 스타일을 강력하게 잡고 있습니다. if문 이후 else if 나 else의 시작은 다음 줄에서 시작할 수 없으며 if문이 끝나는 동일한 라인에서 선언해야 합니다.
또한 조건문에 값을 선언하여 조건문 범위 내에서만 사용할 수 있습니다.
package main import "fmt" func main() { str := "123" var i int = 100 var max int = 1000 if str == "12" { fmt.Println("12") } else if str == "23" { fmt.Println("23") } else { fmt.Println("123") } if val := i * 2; val < max { fmt.Println(val) } // val은 if 조건문 내부에서만 접근이 가능하다. fmt.Println(val) }
Switch
다른 언어와 차이를 가지는 Golang만의 switch 기능을 설명합니다.
1. switch 문의 기본 형태
package main func main() { var text string var number = 1 switch number { case 1: text = "Number 1" case 2: text = "Number 2" case 3, 4: text = "Number 3, 4" default: text = "Other" } println(text) }
2. Swich 문에 표현식을 작성할 수 있음
package main func main() { var text string var number = 1 // number의 비트값을 왼쪽으로 2칸 이동 시킨다. switch x := number << 2; x - 1 { case 1: text = "Number 1" case 2: text = "Number 2" case 3, 4: text = "Number 3,4" default: text = "Other" } println(text) }
3. case 문에 표현식을 작성할 수 있음
package main func main() { var text string var number = 1 switch number { case number - 1: text = "Number 1" case number << 1: text = "Number 2" case 3, 4: text = "Number 3,4" default: text = "Other" } println(text) }
4. switch 뒤에 변수나 표현식이 없을 수 있음
package main func main() { var text string var number = 1 switch { case number == 1: text = "Number 1" case number > 1: text = "Number 2" case 2 < number && number < 5: text = "Number 3, 4" default: text = "Other" } println(text) }
5. 다른 언어는 case 문에 break가 없으면 조건이 성립되도 다음 case문으로 내려가지만 GO는 컴파일러가 자동으로 break문을 각 case문마다 추가해주기 때문에 성립이 되면 바로 멈춤
package main func main() { var text string var number = 1 switch { case number == 0: text = "case 1" case number == 1: text = "case 2" case number > 0: text = "case 3" default: text = "Other" } println(text) // case 2 }
만약 case문을 계속 아래로 타게끔 하고 싶은 경우, fallthrough문을 사용합니다.
package main func main() { var text string var number = 1 switch { case number == 0: text = "case 1" fallthrough case number == 1: text = "case 2" fallthrough case number > 0: text = "case 3" default: text = "Other" } println(text) // case 3 }
6. 받은 변수의 타입에 따라 case문을 타도록 할 수 있음
package main func main() { var v int v = 100 switch conv_v := interface{}(v).(type) { case int: println(conv_v, "int") case bool: println(conv_v, "bool") case string: println(conv_v, "string") default: println(conv_v, "unknown") } }
위와 같이 타입끼리 비교해야 하므로 interface 타입으로 변형을 시켜야 정상적으로 동작이 가능합니다.