섀도잉 변수
- 포함된 블록 내에 이름이 같은 변수가 있는 것
- 섀도잉 변수가 존재하는 한 섀도잉 대상이 된 변수는 접근할 수 없다
for-range의 값은 복사본이다
- 다음 작업에서 evenVals 리스트의 값들은 바뀌지 않는다.
evenVals := []int{2,4,6,8,10}
for _, v := range evenVals {
v *= 2
}
fmt.Println(evenVals)
// [2 4 6 8 10]
break 레이블
package main
func main() {
i := 0
L1:
for {
if i == 0 {
break L1
}
}
println("OK")
}
// OK
- break문은 보통 단독으로 사용되지만 경우에 따라 break 레이블과 같이 사용하여 지정된 레이블로 이동할 수 있다.
break L1
에 도달하면 for 루프를 빠져나와 L1 레이블로 이동하고, 현재 for문 전체를 빠져나와 OK를 출력하게 된다.
switch 문
- Go의
switch
문은 다른 언어들과 약간 다르다. - switch문의 case는 아래 case 구문까지 실행되지 않는다.
fallthrough
를 사용하면 다음 구문도 실행할 수 있다.- case 1, 2, 3, 4와 같이 여러 값을 나열하여 묶을 수 있다.
- 비어 있는 case는 아무 일도 일어나지 않는다 (case 6, 7, 8, 9)
words := []string{"a", "cow", "smile", "gopher", "anthropologist"}
for _, word := range words {
switch size := len(word); size {
case 1, 2, 3, 4:
fmt.Println(word, "is too short")
case 5:
wordLen := len(word)
fmt.Println(word, " length is ", wordLen)
case 6, 7, 8, 9:
default:
fmt.Println(word, "is too long")
}
Share article