식에 대한 데이터 반복

완료됨

또 다른 일반적인 제어 흐름이 루프입니다. Go는 루핑 구문을 하나만 사용하는데 이것이 for 루프입니다. 그런데 루프는 둘 이상의 방식으로 표현할 수 있습니다. 이 부분에서는 Go에서 지원하는 루프 패턴에 대해 알아봅니다.

기본 for 루프 구문

if 문과 switch 문처럼 for 루프 식에는 괄호가 필요하지 않습니다. 그러나 중괄호는 필요합니다.

세미콜론(;)은 for 루프의 다음 세 가지 요소를 구분합니다.

  • 첫 번째 반복 이전에 실행되는 최초 문(선택 사항).
  • 모든 반복 전에 평가되는 조건 식. 이 조건이 false일 때 루프가 중지됩니다.
  • 모든 반복이 끝날 때 실행되는 poststatement(선택 사항).

보다시피 Go의 for 루프는 C, Java, C# 같은 프로그래밍 언어에서 for 루프와 비슷합니다.

Go에서 가장 단순한 형태의 for 루프는 다음과 같습니다.

func main() {
    sum := 0
    for i := 1; i <= 100; i++ {
        sum += i
    }
    fmt.Println("sum of 1..100 is", sum)
}

이 외에 Go에서 루프를 작성하는 방법을 알아보겠습니다.

빈 prestatement와 poststatement

일부 프로그래밍 언어에서는 조건 식만 필요한 루프 패턴을 작성할 때 while 키워드를 사용합니다. Go에는 while 키워드가 없습니다. 그러나 for 루프를 대신 사용하고 Go에서 prestatement 및 poststatement를 선택 사항으로 만든다는 사실을 활용할 수 있습니다.

다음 코드 조각을 사용하여 prestatement 및 poststatement를 사용하지 않고 for 루프를 사용할 수 있는지 확인합니다.

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    var num int64
    rand.Seed(time.Now().Unix())
    for num != 5 {
        num = rand.Int63n(15)
        fmt.Println(num)
    }
}

num 변수에 5와 다른 값이 포함되어 있으면 프로그램에서 난수를 출력합니다.

무한 루프 및 break 문

Go에서 쓸 수 있는 또 다른 루프 패턴이 무한 루프입니다. 이 경우에는 조건 식이나 prestatement 또는 poststatement를 작성하지 않습니다. 그 대신 루프에서 직접 작성합니다. 그렇게 하지 않으면 논리가 종료되지 않습니다. 논리가 루프를 종료하게 하려면 break 키워드를 사용합니다.

적절한 무한 루프를 작성하려면 다음과 같이 중괄호가 있는 for 키워드를 따릅니다.

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    var num int32
    sec := time.Now().Unix()
    rand.Seed(sec)

    for {
        fmt.Print("Writing inside the loop...")
        if num = rand.Int31n(10); num == 5 {
            fmt.Println("finish!")
            break
        }
        fmt.Println(num)
    }
}

이 코드를 실행할 때마다 다른 출력을 얻게 됩니다.

Continue 문

Go에서 continue 키워드를 사용하여 루프의 현재 반복을 건너뛸 수 있습니다. 예를 들어 이 키워드를 사용하여 루프가 계속되기 전에 유효성 검사를 실행할 수 있습니다. 또는 무한 루프를 작성하여 리소스를 사용할 수 있게 될 때까지 기다려야 할 경우에 사용합니다.

이 예제에서는 continue 키워드를 사용합니다.

package main

import "fmt"

func main() {
    sum := 0
    for num := 1; num <= 100; num++ {
        if num%5 == 0 {
            continue
        }
        sum += num
    }
    fmt.Println("The sum of 1 to 100, but excluding numbers divisible by 5, is", sum)
}

이 예제에는 1에서 100까지 반복하는 for 루프가 있으며 각 반복의 합계에 현재 숫자가 추가됩니다. 5로 나눌 수 있는 모든 숫자는 루프의 현재 반복에서 건너뛰고 합계에 추가되지 않습니다.