if 문
if 문은 해당 조건이 맞으면 {}
블럭 안의 내용을 실행한다.
- 조건식을
()
로 둘러 싸지 않아도 된다. - 조건 블럭 시작
{
를 if문과 같은 라인에 두어야 한다.
1
2
3
4
5
6
7
| if k == 1 {
println("One")
} else if k == 2 { //같은 라인
println("Two")
} else { //같은 라인
println("Other")
}
|
Optional Statement
if문에서 조건식을 사용하기 이전에 간단한 문장(Optional Statement)을 함께 실행할 수 있다.
1
2
3
4
5
6
| if val := i * 2; val < max {
println(val)
}
// 아래 처럼 사용하면 Scope 벗어나 에러
val++
|
val := i * 2
처럼 조건식 이전에 연산을 실행할 수 있는데, 정의된 변수 val의 범위는 if-else 블럭이다.
if문 외에도 switch, for 에서도 사용할 수 있다.
switch 문
다른 언어들과 비슷하게 하나의 변수를 지정하고 case
문에 해당 변수가 가질 수 있는 값들을 지정하여 case
블럭을 실행한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| package main
func main() {
var name string
var category = 1
switch category {
case 1:
name = "Paper Book"
case 2:
name = "eBook"
case 3, 4:
name = "Blog"
default:
name = "Other"
}
println(name)
// Expression을 사용한 경우
switch x := category << 2; x - 1 {
//...
}
}
|
다른 언어와 차이점
C++, C#, Java 등과 조금 다르게 동작한다.
switch 뒤에 expression이 없을 수 있음
다른 언어는 switch
키워드 뒤에 변수나 조건식을 두지만, Go는 쓰지 않아도 된다. 이런 경우 true
로 간주하고 첫번째 case
문으로 이동하여 검사한다.
case문에 조건식 쓸 수 있음
다른 언어는 일반적으로 값을 갖지만, Go는 조건식을 쓸 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| func grade(score int) {
switch {
case score >= 90:
println("A")
case score >= 80:
println("B")
case score >= 70:
println("C")
case score >= 60:
println("D")
default:
println("No Hope")
}
}
|
No default fall through
case
문에 기본적으로 break
를 적용한다. 다음 case
로 넘어가려면 fallthrough
키워드를 쓴다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| func check(val int) {
switch val {
case 1:
fmt.Println("1 이하")
fallthrough
case 2:
fmt.Println("2 이하")
fallthrough
case 3:
fmt.Println("3 이하")
fallthrough
default:
fmt.Println("default 도달")
}
}
|
Type switch
switch
뒤 변수의 타입으로 분기할 수 있다.
1
2
3
4
5
6
7
8
9
10
| switch v.(type) {
case int:
println("int")
case bool:
println("bool")
case string:
println("string")
default:
println("unknown")
}
|