Golang For 루프 자습서 [With Examples]

몇 가지 유용한 예제를 코딩하여 Golang for 루프에 대해 모두 알아보세요.

최근 Rust, Golang 및 TypeScript와 같은 프로그래밍 언어가 개발자들 사이에서 매우 인기를 얻고 있습니다. 백엔드 개발 및 DevOps에 관심이 있다면 Golang을 배우는 것이 탁월한 선택임을 고려해야 합니다!

프로그래밍 언어의 기초를 배우는 초보자라면 루프 구조는 가장 먼저 이해해야 할 개념 중 하나입니다.

Golang은 for 루프 구조만 제공합니다. 그리고 for 루프와 for 루프를 사용하여 다른 루프를 에뮬레이트하는 방법에 대해 알아봅니다.

의 시작하자!

Golang For 루프의 구문

Golang에서는 다음 구문을 사용하여 for 루프를 만들 수 있습니다.

for initialization; condition; update {
    // do something
}

여기,

  • 초기화는 루핑 변수의 초기화를 나타냅니다.
  • condition은 루프 본문의 실행을 결정하는 루핑 조건입니다. 루핑 조건이 true로 평가되는 한 루프 본문의 명령문이 실행됩니다. 그리고 조건이 거짓이 되면 컨트롤이 루프를 종료합니다.
  • 업데이트는 루핑 변수에 대한 업데이트(일반적으로 증가 또는 감소)를 나타냅니다.

💡 이것이 괄호만 없는 C for 루프와 얼마나 유사한지 주목하십시오.

Golang for 루프의 제어 흐름은 다음과 같습니다.

몇 가지 예제를 코딩할 시간입니다!⏰ 함께 코딩하려면 Golang의 로컬 설치를 사용하거나 Go Playground에서 예제를 실행할 수 있습니다.

Golang For 루프 예제

방금 배운 구문을 사용하여 첫 번째 for 루프를 작성해 봅시다. 다음은 1에서 5까지의 숫자를 1단계씩 출력하는 간단한 for 루프입니다.

package main

import "fmt"

func main() {
	fmt.Println("For loop:")
	num := 5
	for i := 1; i <= num; i++ {
		fmt.Println(i)
	}
}

루핑 변수 i를 1로 초기화하고 조건을 i <= 5로 설정하고 반복할 때마다 루핑 변수를 1씩 증가시킵니다. 결과는 다음과 같습니다.

//Output
For loop:
1
2
3
4
5

다른 for 루프를 작성해 봅시다. 이 루프는 5부터 시작하여 1까지 카운트다운합니다. 반복 변수가 1보다 크거나 같을 때까지 계속됩니다. 따라서 각 반복 후에 반복 변수를 1씩 감소시킵니다.

package main

import "fmt"

func main() {
	fmt.Println("For loop:")
	num := 5
	for i := num; i >= 1; i-- {
		fmt.Println(i)
	}
}

그리고 예상되는 결과를 얻습니다.

//Output
For loop:
5
4
3
2
1

루핑 변수의 범위는 무엇입니까?

반복 변수의 범위는 for 루프 블록으로 제한되며 루프 외부에서 액세스할 수 없습니다.

  Snapchat에서 누군가 추가되지 않았거나 친구가 없는지 확인하는 방법

이를 확인하기 위해 루프 외부에서 반복 변수 i의 값에 액세스해 봅시다.

package main

import "fmt"

func main() {
	fmt.Println("For loop:")
	num := 5
	for i := 1; i <= num; i++ {
		fmt.Println(i)
	}
	fmt.Println(i)

}

예상대로 i가 정의되지 않았다는 오류가 발생합니다(그리고 해당 범위는 for 루프로 제한됨).

// Output
./prog.go:11:14: undefined: i

Golang의 무한 For 루프

Go에서 무한 for 루프를 사용할 수 있습니까? 예, 가능합니다!

for 루프의 제어 흐름을 보면 다음과 같습니다.

  • 루프 본문은 조건이 true로 평가되는 한 계속 실행됩니다.
  • 조건이 거짓이 되면 컨트롤이 루프를 종료합니다.
  • 따라서 조건이 거짓이 되지 않거나 항상 참이면 무한 루프에 빠진 것입니다.

그러나 구문 오류 없이 초기화, 조건 및 업데이트 없이 for 루프를 사용할 수도 있습니다. 따라서 다음과 같은 for 루프 구성을 사용하여 루프를 무한대로 실행하도록 할 수 있다면:

package main

import "fmt"

func main() {
	for {
	   fmt.Println("running...")
	}
}
//Output
running...
running...
running...
running...
running...
//and it goes on forever!

이 예제에서는 변수 num을 5로 설정합니다. 그리고 루프 조건은 num >= 5입니다. 따라서 num이 0보다 크거나 같은 동안 루프가 실행됩니다.

package main

import "fmt"

func main() {
	num := 5
	for num > 0 {
		fmt.Println(num)
	}
}

num의 값은 절대 변하지 않기 때문에 조건은 항상 true로 평가되고 루프는 영원히 실행됩니다!

//Output
5
5
5
5
5
5
//and it goes on forever!

모든 Golang에는 for 루프 구조만 있습니다. for 루프를 사용하여 while 및 do-while 루프를 에뮬레이트할 수 있습니다. 그럼 어떻게 하는지 배워봅시다!

For 루프를 사용하여 While 루프 에뮬레이션

while 루프는 일반적으로 다음 형식을 취합니다.

// initialize looping var
while (condition){
    // do something
    // update looping var
} 

기억한다면, 첫 번째 무한 for 루프에서 다음과 같이 작성했습니다. 초기화, 조건 및 업데이트 없이 다음 for 루프를 사용했습니다.

for {
// the simplest infinite loop
}

따라서 while 루프를 에뮬레이트하기 위해 다음 형식의 조건만 포함하도록 for 루프를 수정할 수 있습니다.

//initialize looping var
for condition {
 // do something
 // update looping var
}

다음은 우리가 작성한 첫 번째 for 루프와 동일한 while 루프입니다.

package main

import "fmt"

func main() {
	fmt.Println("Emulating while loop")
	num := 5
	for num > 0 {
		fmt.Println(num)
		num--
	}
}
//Output
Emulating while loop
5
4
3
2
1

For 루프를 사용하여 Do-While 루프 에뮬레이션

C와 같은 언어로 코딩했다면 do-while 루프 구조가 다음 형식을 취한다는 것을 알고 있습니다.

// initialize looping var
do {
//something
// update looping var
} while(condition);

while과 do while 루프의 주요 차이점은 while 루프가 루프에 들어갈 때 조건을 확인한다는 것입니다. 반면 do-while 루프는 루프 종료 시 조건을 확인합니다.

  iPhone 및 Mac에서 Safari를 업데이트하는 방법

따라서 while 루프에서 조건이 false로 평가되면 루프 본문이 실행되지 않습니다. 그러나 do-while 루프에서는 조건이 false로 평가되더라도 루프 본문이 실행됩니다.

이 정보를 사용하여 do-while 루프의 동작을 에뮬레이트할 수 있습니다.

  • 무한 for 루프 작성
  • 올바른 조건과 함께 if 조건문을 사용하여 루프를 중단하십시오.

실행할 루프 본문의 조건이 num < 0인 do-while 루프를 작성하고 싶다고 가정해 보겠습니다. 따라서 for 루프를 작성하고 num >= 0인 경우 루프에서 나갈 수 있습니다.

package main

import "fmt"

func main() {
	fmt.Println("Emulating do-while loop")
	num := 5
	for {
		fmt.Println("loop runs...")
		if num >= 0 {
			break
		}
	}
}

💡 num < 0인 경우 루프를 실행하고 num >= 0인 경우 루프를 중단하는 것은 동일한 조건입니다.

num > 0 조건이 처음에는 거짓(num이 5임)이지만 루프 본문은 한 번 실행되어 do-while 루프를 에뮬레이트합니다.

//Output
Emulating do-while loop
loop runs...

For 루프를 사용하여 배열을 통해 루핑

for 루프와 범위를 사용하여 Golang에서 배열을 반복할 때 인덱스와 요소 모두에 액세스할 수 있습니다. 이것은 Python의 enumerate 함수와 유사하게 작동합니다.

여기서는 정수 배열인 numArray를 만듭니다. 그리고 for 루프를 사용하여 반복합니다.

package main

import "fmt"

func main() {
	fmt.Println("Looping through an array")
	numArray := []int{3, 7, 0, 10, 8, 9}
	for idx, num := range numArray {
		fmt.Println("At index", idx, ": ", num)
	}
}

보시다시피 인덱스와 각 인덱스의 요소에 동시에 액세스할 수 있습니다.

//Output
Looping through an array
At index 0 :  3
At index 1 :  7
At index 2 :  0
At index 3 :  10
At index 4 :  8
At index 5 :  9

Golang For Loop에서 지연 사용

Golang에서는 defer 키워드를 사용하여 함수 호출을 연기할 수 있습니다.

리소스 정리 및 오류 처리와 같은 애플리케이션에 사용되지만 for 루프 내에서 defer를 사용하는 방법을 이해하는 것이 도움이 될 수 있습니다. Println() 함수에 대한 호출을 연기하기 위해 for 루프 내에서 defer를 사용할 때 어떤 일이 발생하는지 살펴보겠습니다.

package main

import "fmt"

func main() {
	fmt.Println("For loop:")
	num := 5
	for i := 1; i <= num; i++ {
		defer fmt.Println(i)
	}
}

💬 함수 호출이 지연되면 함수 호출이 스택에 푸시되고 LIFO 순서로 실행됩니다. 이 실행은 defer 문을 둘러싼 함수가 반환된 후에만 발생합니다.

  macOS Sierra에서 PIP(Picture In Picture)를 활성화하는 방법

따라서 fmt.Println(5)이 먼저 실행되고 fmt.Println(1)이 마지막에 실행됩니다.

//Output
For loop:
5
4
3
2
1

결론

다음은 이 자습서에서 배운 내용을 요약한 것입니다.

  • Golang에서는 for initialization 구문을 사용하여 for 루프를 만들 수 있습니다. 상태; 업데이트 { //루프 본문}.
  • for 루프의 제어 흐름은 매우 간단합니다. 루핑 변수는 한 번 초기화되고 조회 조건은 루프 본문을 실행할지 여부를 결정하며 업데이트는 모든 반복 후 루핑 변수의 업데이트를 나타냅니다.
  • 루핑 변수의 범위는 루프 본문으로 제한되며 루프 외부에서 액세스할 수 없습니다.
  • Golang은 for 루프 구성만 제공하지만 for 루프를 사용하여 while 및 do-while 루프 동작을 에뮬레이트할 수 있습니다.
  • for 루프의 몇 가지 다른 응용 프로그램에는 배열을 통한 루핑과 for 루프 본문 내부의 함수 호출 지연이 포함됩니다.

다음으로 Python에서 for 루프를 사용하는 방법을 배웁니다. 즐거운 배움!🎉