수색…
소개
프로그래밍에서 가장 기본적인 기능 중 하나 인 루프는 거의 모든 프로그래밍 언어에서 중요한 부분입니다. 루프를 사용하면 개발자는 코드의 특정 부분을 반복이라고하는 여러 루프를 반복하도록 설정할 수 있습니다. 이 주제에서는 여러 유형의 루프와 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
break
및 continue
문은 추가로 문을 대상으로 지정할 외부 루프를 식별하는 데 사용되는 선택적 레이블을 허용합니다.
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")
}
}