수색…


소개

프로그래밍에서 가장 기본적인 기능 중 하나 인 루프는 거의 모든 프로그래밍 언어에서 중요한 부분입니다. 루프를 사용하면 개발자는 코드의 특정 부분을 반복이라고하는 여러 루프를 반복하도록 설정할 수 있습니다. 이 주제에서는 여러 유형의 루프와 Go의 루프 응용 프로그램 사용에 대해 다룹니다.

기본 루프

for 가 유일한 루프 문이므로 기본 루프 구현은 다음과 같이 보일 수 있습니다.

// like if, for doesn't use parens either.
// variables declared in for and if are local to their scope.
for x := 0; x < 3; x++ { // ++ is a statement.
    fmt.Println("iteration", x)
}

// would print:
// iteration 0
// iteration 1
// iteration 2

휴식과 계속

루프를 중단하고 다음 반복을 계속하는 것도 Go에서 지원됩니다. 다른 많은 언어와 마찬가지로

for x := 0; x < 10; x++ { // loop through 0 to 9
    if x < 3 { // skips all the numbers before 3
        continue
    } 
    if x > 5 { // breaks out of the loop once x == 6
        break
    }
    fmt.Println("iteration", x)
}

// would print:
// iteration 3
// iteration 4
// iteration 5

breakcontinue 문은 추가로 문을 대상으로 지정할 외부 루프를 식별하는 데 사용되는 선택적 레이블을 허용합니다.

OuterLoop:
for {
    for {
        if allDone() {
            break OuterLoop
        }
        if innerDone() {
            continue OuterLoop
        }
        // do something
    }
}

조건부 루프

for 키워드는 다른 프로그래밍 언어에서 일반적 while 반복되는 while 조건부 루프에도 사용됩니다.

package main

import (
    "fmt"
)

func main() {
    i := 0
    for i < 3 { // Will repeat if condition is true
        i++
        fmt.Println(i)
    }
}

놀이터에서 놀아 라.

출력 :

1
2
3

무한 루프 :

for {
    // This will run until a return or break.
}

For 루프의 다른 형식

하나의 변수를 사용하는 간단한 양식 :

for i := 0; i < 10; i++ {
    fmt.Print(i, " ")
}

두 개의 변수 (또는 그 이상) 사용 :

for i, j := 0, 0; i < 5 && j < 10; i, j = i+1, j+2 {
    fmt.Println(i, j)
}

초기화 문을 사용하지 않고 :

i := 0
for ; i < 10; i++ {
    fmt.Print(i, " ")
}

테스트 표현식없이 :

for i := 1; ; i++ {
    if i&1 == 1 {
        continue
    }
    if i == 22 {
        break
    }
    fmt.Print(i, " ")
}

증분없는 표현 :

for i := 0; i < 10; {
    fmt.Print(i, " ")
    i++
}

세 가지 초기화, 테스트 및 증분 표현식이 모두 제거되면 루프는 무한대가됩니다.

i := 0
for {
    fmt.Print(i, " ")
    i++
    if i == 10 {
        break
    }
}

이것은 카운터가 0으로 초기화 된 무한 루프의 예입니다.

for i := 0; ; {
    fmt.Print(i, " ")
    if i == 9 {
        break
    }
    i++
}

테스트 표현식이 사용될 때 (일반적인 while 루프와 같이 동작) :

i := 0
for i < 10 {
    fmt.Print(i, " ")
    i++
}

증분 식만 사용 :

i := 0
for ; ; i++ {
    fmt.Print(i, " ")
    if i == 9 {
        break
    }
}

인덱스와 값을 사용하여 값의 범위를 반복합니다.

ary := [5]int{0, 1, 2, 3, 4}
for index, value := range ary {
    fmt.Println("ary[", index, "] =", value)
}

인덱스 만 사용하여 범위를 반복합니다.

for index := range ary {
    fmt.Println("ary[", index, "] =", ary[index])
}

인덱스 만 사용하여 범위를 반복합니다.

for index, _ := range ary {
    fmt.Println("ary[", index, "] =", ary[index])
}

값만 사용하여 범위를 반복합니다.

for _, value := range ary {
    fmt.Print(value, " ")
}

지도의 키와 값을 사용하여 범위를 반복합니다 (순서가 잘못되었을 수 있음).

mp := map[string]int{"One": 1, "Two": 2, "Three": 3}
for key, value := range mp {
    fmt.Println("map[", key, "] =", value)
}

지도의 키를 사용하여 범위를 반복합니다 (순서가 맞지 않을 수도 있음).

for key := range mp {
    fmt.Print(key, " ") //One Two Three
}

지도의 키를 사용하여 범위를 반복합니다 (순서가 맞지 않을 수도 있음).

for key, _ := range mp {
    fmt.Print(key, " ") //One Two Three
}

지도의 값만 사용하여 범위를 반복합니다 (순서가 맞지 않을 수 있음).

for _, value := range mp {
    fmt.Print(value, " ") //2 3 1
}

채널의 범위를 반복합니다 (채널이 닫힌 경우 종료).

ch := make(chan int, 10)
for i := 0; i < 10; i++ {
    ch <- i
}
close(ch)

for i := range ch {
    fmt.Print(i, " ")
}

문자열의 범위를 반복합니다 (유니 코드 코드 포인트 제공).

utf8str := "B = \u00b5H" //B = µH
for _, r := range utf8str {
    fmt.Print(r, " ") //66 32 61 32 181 72
}
fmt.Println()
for _, v := range []byte(utf8str) {
    fmt.Print(v, " ") //66 32 61 32 194 181 72
}
fmt.Println(len(utf8str)) //7

utf8str 에는 6 개의 룬 (유니 코드 코드 포인트)과 7 바이트가 있습니다.

시간 지정 루프

package main

import(
    "fmt"
    "time"
)

func main() {
    for _ = range time.Tick(time.Second * 3) {
        fmt.Println("Ticking every 3 seconds")
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow