Go 조건문
if 문
if문은 해당 조건이 맞으면 {} 블럭안의 내용을 실행한다. Go의 if 조건문은 괄호()로 둘러 싸지 않아도 된다. 그리고 반드시 조건 블럭 시작 {}를 if문과 같은 라인에 두어야한다.
그리고 한가지 주목할 점은 if문의 조건식은 반드시 Boolean식으로 표현되어야 한다는 것이다.
package main
import "fmt"
var k int = 1
func main() {
if k==1{
fmt.Println("one") // one
}
}
if문은 else if, 혹은 else문을 함께 가질 수 있다. else if문은 if 조건문이 거짓일 대 다시 다른 if 조건식을 검사하는데 사용되며, else문은 이전의 if 문들이 모두 거짓일 때 실행된다.
package main
import "fmt"
var k int = 1
func main() {
if k==1{
fmt.Println("one") // one
} else if k==2{
fmt.Println("two") // k가 2일경우 two
} else{
fmt.Println("other") // k가 1 혹은 2가 아닐경우 other
}
}
if문에서 조건식을 사용하기 이전에 간단한 문장을 함께 실행할 수 있다. 즉 아래 코드 처럼 a:= k+1
라는 문장을 조건식 이전에 실행할 수 있는데, 여기서 주의할 점은 이때 정의된 변수 a는 if문 블럭 scope 안에서만 사용할 수 있다는 것이다.
package main
import "fmt"
var k int = 1
var b int = 5
func main() {
if a:= k+1; a<b {
fmt.Println(a) // 2
}
}
switch 문
여러 값을 비교해야 하는 경우 혹은 다수의 조건식을 체크해야 하는 경우 switch 문을 사용한다. 다른 언어들과 비슷하게 switch 문 뒤에 하나의 변수를 지정하고, case 문에 해당 변수가 가질 수 있는 값들을 지정하여 각 경우에 다른 문장 블럭들을 실행할 수 있다.
package main
import "fmt"
func main() {
var name string
var number int = 1
switch number{
case 1:
name = "John"
case 2:
name = "Mike"
case 3,4:
name = "Harry"
default:
name = "Nothing"
}
fmt.Println(name) // John
}
다음은 Go언어만의 특별한 switch 용법들이다.
-
switch 뒤에 표현이 없을 수 있음
다른 언어는 switch 키워드 뒤에 변수나 표현을 반드시 두지만, Go는 이를 쓰지 않아도 된다. 이 경우 Go는 switch 표현을 true로 생각하고 첫번째 case문으로 이동하여 검사한다.
- case문에 표현을 쓸 수 있음 다른 언어의 case 문은 일반적으로 리터럴 값만을 갖지만, Go는 case문에 복잡한 표현을 가질 수 있다.
-
No default fall through
다른 언어의 case문은 break를 쓰지 않는 한 다음 case로 이동하지만, Go는 다음 case로 가지 않는다.
-
type switch
다른 언어의 switch는 일반적으로 변수의 값을 기준으로 case로 분기하지만, Go는 그 변수의 type에 따라 case로 분기할 수 있다.