go-for문

kyunhyun94·2021년 12월 30일

💯for문

  • Go 언어는 C, C++와는 달리 반복문이 for만 있다

  • C, C++ 등의 for 반복문과 동일하며 단, 반복문을 작성할 때 ( ) (괄호)를 사용하지 않으며 반복문을 시작하는 줄에서 { (여는 중괄호)가 시작됩니다.

  • 초깃값: 반복문이 시작할 때 기준이 되는 값입니다. 바깥에서 변수를 선언하여 사용할 수도 있고, :=를 사용하여 변수를 바로 생성하여 사용할 수도 있다. :=로 변수를 생성했다면 for 반복문 안에서만 접근할 수 있다.

  • 조건식: 조건식의 결과가 참(true)일 때만 중괄호 블록을 반복한다. 따라서 조건식의 결과는 반드시 불형이되어야 하며. C 언어와 달리 조건식의 결과가 정수형, 실수형, 문자열 값 등이 되면 컴파일 에러가 발생

  • 변화식: 중괄호 블록이 한 번 실행된 뒤에 변화할 식을 설정,여기서는 초깃값에 0을 대입한 뒤 조건식을 i < 5로 지정하여 i가 5보다 작을 때까지만 반복하도록 . 그리고 변화식에는 i++을 지정하여 반복할 때마다 i가 1씩 증가하도록 하였으며, 따라서 i가 5가 되면 조건식은 거짓이 되므로 반복문이 끝!!

  • 다음과 같이 여는 중괄호를 다음 줄에 작성하면 컴파일 에러가 발생

for i := 0; i < 5; i++ // 컴파일 에러
{
         fmt.Println(i)
}
for i := 5; i > 0; i-- {
	fmt.Println(i)
}
  • for반복문에 조건식만 사용
i := 0
for i < 5 {
	fmt.Println(i)
	i = i + 1 // i++
}
  • 무한루프
for {
	fmt.Println("Hello, world!")
}

👩🏻‍🎓break

for 키워드에 아무것도 설정하지 않으면 무한 루프가 발생. 즉, C, C++의 for (;;)처럼 동작, 이때 반복문을 중단하려면 중괄호 블록안에서 조건을 정하고 break 키워드를 사용하면 해결. 물론 변화식도 중괄호 블록 안에서 설정한다

i := 0
for {
	if i > 4 { // i가 4가 되는 순간
		break  // 반복문이 중단됩니다.
	}

	fmt.Println(i)
	i = i + 1 // 변화식에서 조건을 변경합니다.
}

다음과 같이 break 키워드에 레이블을 지정할 수도 있습니다(레이블 이름은 변수 이름을 짓는 규칙과 같다).

Loop: // Loop 레이블을 지정
	for i := 0; i < 3; i++ {           // 반복문 1
		for j := 0; j < 3; j++ {   // 반복문 2
			if j == 2 {        // j가 2일 때
				break Loop // 중첩된 반복문을 빠져나옴
			}

			fmt.Println(i, j)
		}
	}

	fmt.Println("Hello, world!")

결과

0 0
0 1
Hello, world!
  • 중첩된 for 반복문에서 빠져나올 때 break 키워드에 레이블을 지정하면 편리하며. 이렇게 break 키워드에 레이블을 지정하여 빠져나오면 모든 for 반복문을 더 이상 실행하지 않고 완전히 중단한다

다음과 같이 레이블과 for 키워드 사이에 다른 코드가 있으면 에러가 발생한다


Loop:
	fmt.Println("begin for loop") // 들어가면 안 되는 코드
	for i := 0; i < 3; i++ {
		for j := 0; j < 3; j++ {
			if j == 2 {
				break Loop // 컴파일 에러. invalid break label Loop
			}

			fmt.Println(i, j)
		}
	}

	fmt.Println("Hello, world!")

👩🏻‍🎓continue

  • 반복문에서 특정 부분 이하는 실행하지 않고 넘어가려면 continue 키워드를 사용하며, 다음 코드는 2를 제외하고 0, 1, 3, 4를 출력한다.
for i := 0; i < 5; i++ {
	if i == 2 {  // i가 2일 때
		continue // 아래 부분 코드를 실행하지 않고 넘어감
	}

	fmt.Println(i)
}
  • 다음과 같이 continue 키워드에 레이블을 지정할 수도 있습니다(레이블 이름은 변수 이름을 짓는 규칙과 같다).

Loop:
	for i := 0; i < 3; i++ {              // 반복문 1
		for j := 0; j < 3; j++ {      // 반복문 2
			if j == 2 {           // j가 2일 때
				continue Loop // 아래 부분 코드를 실행하지 않고 반복문 1부터 이어서 실행
			}

			fmt.Println(i, j)
		}
	}

	fmt.Println("Hello, world!")

결과

0 0
0 1
1 0
1 1
2 0
2 1
Hello, world!
Loop:
	fmt.Println("begin for loop") // 들어가면 안 되는 코드
	for i := 0; i < 3; i++ {
		for j := 0; j < 3; j++ {
			if j == 2 {
				continue Loop // 컴파일 에러. invalid continue label Loop
			}

			fmt.Println(i, j)
		}
	}

	fmt.Println("Hello, world!")
  • 반복문의 변화식에서 여러 변수를 처리하려면 병렬 할당을 사용해야 하며 다음과 같이 i가 10보다 작을 때까지 반복을 하면서 i는 1씩 증가시키고, j는 2씩 증가시키는 코드가 대표적인 예이다
for i, j := 0, 0; i < 10; i, j = i+1, j+2 {
	fmt.Println(i, j)
}
  • i, j = i+1, j+2와 같이 i에는 i+1 값이 대입되고, j에는 j+2 값이 대입되도록 설정하면 됩니다. 마찬가지로 초깃값도 i, j := 0, 0처럼 i, j 변수를 동시에 선언하고 초기화

  • 다음과 같이 변화식 부분에서 병렬 할당을 사용하지 않고 i++, j+2처럼 변화식을 그대로 나열하면 컴파일 에러가 발생하므로 주의해야한다

for i, j := 0, 0; i < 10; i++, j+=2 { // 컴파일 에러. syntax error: unexpected comma, expecting {
	fmt.Println(i, j)
}
profile
일하기싫어

0개의 댓글