Featured image of post Golang: 3. 반복문

Golang: 3. 반복문

for 문

Go 언어에서 반복문은 for 하나뿐이다. 다른 언어들과 비슷하게 for 초기값; 조건식; 증감 {...} 형식을 따른다.

초기값, 조건식, 증감식은 경우에 따라 생략할 수 있고, 초기값; 조건식; 증감 을 둘러싸는 괄호를 추가하면 에러가 발생한다.

1
2
3
4
5
6
7
8
9
package main
 
func main() {
    sum := 0
    for i := 1; i <= 100; i++ {
        sum += i
    }
    println(sum)
}

조건식만 사용하는 for 루프

초기값과 증감식을 생략하고 조건식만 사용하면 다른 언어의 while 루프와 같게 동작한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
package main
 
func main() {
    n := 1
    for n < 100 {
        n *= 2      
        //if n > 90 {
        //   break 
        //}     
    }
    println(n)
}

무한루프

초기값, 조건식, 증감을 모두 생략하면 무한루프로 동작한다.

1
2
3
4
5
6
7
package main
 
func main() {
    for {
        println("Infinite loop")        
    }
}

range 문

for range문은 컬렉션으로 부터 한 요소씩 가져와 차례로 for 블럭 문장들을 실행한다. 다른 언어의 foreach와 비슷하다.

for range 문은 for 인덱스, 요소값 := range 컬렉션 형태로 for 루프를 구성하는데, range 키워드 다음에 명시한 컬렉션으로부터 하나씩 요소를 반환하여 그 요소의 인덱스와 값을 for 키워드 다음 2개 변수에 각각 할당한다.

1
2
3
4
5
names := []string{"홍길동", "이순신", "강감찬"}
 
for index, name := range names {
    println(index, name)
}

break, countinue, goto

  • break: for 루프 내에서 즉시 빠져나옴
  • continue: 루프 중간에서 나머지 문장들을 실행하지 않고 다음 루프를 시작함
  • goto: 임의의 문장으로 이동
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
package main
func main() {
    var a = 1
    for a < 15 {
        if a == 5 {
            a += a
            continue // for루프 시작으로
        }
        a++
        if a > 10 {
            break  //루프 빠져나옴
        }
    }
    if a == 11 {
        goto END //goto 사용예
    }
    println(a)
 
END:
    println("End")
}

break 레이블

break문은 보통 단독으로 사용되지만, 경우에 따라 레이블을 붙여 지정된 레이블로 이동할 수도 있다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
package main
 
func main() {
    i := 0
 
L1:
    for {
     
        if i == 0 {
            break L1
        }
    }
 
    println("OK")
}

break의 레이블은 현재 보통 현재 for 루프 바로 위에 적게 되는데, 현재 루프를 빠져나와 지정된 레이블로 이동하고, 동작한 break문이 속한 for 루프 전체의 다음 문장을 실행한다.