Doodly IT

[Go 묘공단 스터디] for문 본문

프로그래밍/Go

[Go 묘공단 스터디] for문

DoodlyKim 2023. 11. 15. 16:12

1 ) for문 기본구조

 

Go에서 for문의 기본 구조는 아래와 같다.

for 초기문; 조건문; 후처리{
	코드블럭
   }

 

예를 들면 0부터 9까지 출력해보는 구문을 만들어 보면 아래와 같다.

 

package main

import "fmt"

func main() {

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

}

 

출력결과는 아래와 같이  나온다.

 

for문을 나타내는 경우는 여러가지가 있다.

 

  • 초기문을 생략하는 경우
for ; 조건문 ; 후처리 {
코드 블럭
}
  • 후처리를 생략하는 경우 
for 초기문; 조건문; {
코드블럭
}
  • 조건문만 있는 경우
for ;조건문; {
코드 블럭
}
  • 무한루프
for true{
코드블럭
}

 

switch문에서 조건문을 생략하면 true가 되듯이 for문에서도 true를 생략할 수 있다.

즉 위의 코드는 아래와 같다.

for {
코드블럭
}

 

 

 

 

 

 

2) continue, break 키워드

 

continue와 break 는 반복문을 제어하는 키워드이다. continue는 이후 코드 블록을 수행하지 않고 곧바로 후처리를 하고 조건문 검사부터 다시 하고 , break 는 for문에서 곧바로 빠져 나온다. 

 

숫자를 입력하고 짝수인지 홀수인지를 판단하는 예제를 보면, 

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	stdin := bufio.NewReader(os.Stdin)

	for {
		fmt.Println("입력하세요")
		var number int
		_, err := fmt.Scanln(&number)

		if err != nil {
			fmt.Println("숫자를 입력하세요.")

			stdin.ReadString('\n')
			continue
		}

		fmt.Printf("입력하신 숫자는 %d입니다.\n", number)

		if number%2 == 0 {
			break
		}
	}

	fmt.Println("for문이 종료됐습니다.")
}

 

  • 무한 루프로 돌아간다.
  • 키보드로 부터 숫자를 입력받는다. 만약 숫자가 아닌 경우에는 err에 에러값이 들어가게 된다. 즉 err에 에러값이 들어가서 nil이 되지 못한다면,(null이 되지 못한다면) 에러가 발생했다는 뜻이다. 또한 이때 줄바꿈 까지 문자열을 다시 읽어서 키보드 버퍼를 없애줘야한다.
  • continue를 통해서 코드 블럭을 건너띈다. 무한루프이기 때문에 별도의 전처리와 후처리 없이 바로 다음 반복을 진행한다.
  • 입력 받는 입력값이 숫자라면 2로 나눈 값이 0이란 값이 되고 이는 짝수라는 뜻이다. 짝수 인것이 확인이 된다면, for문을 종료한다.

 

여기서 -, err = fmt.Scanln(&number) 구문이 헷갈렸는데, 

Go에서 _ (밑줄)은 반환되는 값을 무시할때 쓰인다. 보통 오류에만 관심이 있을때 쓰이는 식별자이다.

err는 변수 선언이다. 타입은 error로 지정했다.

 

 

 

3) 중첩 for문

말그대로 for을 중첩해서 쓰는 구문이다.

아래 곱셈 예제를 보면

package main

import (
	"fmt"
)

func main() {

	for i := 1; i < 10; i++ {
		for j := 1; j < 10; j++ {
			fmt.Println(i, "*", j, "=", i*j)
		}
		fmt.Println("---------------------------")
	}
}

 

이렇게 for문을 겹치면 값을 동시에 증가시키면서 곱셈을 수행할 수 있다.

결과가 이렇게 나온다.

 

 

 

Q1. 1초마다 한번씩 1을 증가시키는 예문을 만들어보자. 10초가 되면 "Time is Over"를 출력하고 프로그램을 종료한다.

 

1초마다 1을 증가시키는 예제 결과
package main

import (
	"fmt"
	"time"
)

func main() {

	i := 1
	for {
		time.Sleep(time.Second)
		fmt.Println(i)
		i++

		if i == 10 {
			fmt.Println("Time is Over")
			break
		}
	}
}

 

 

 

 

 

 

'프로그래밍 > Go' 카테고리의 다른 글

[Go 묘공단 스터디] 구조체  (0) 2023.11.15
[Go 묘공단 스터디]배열  (0) 2023.11.15
[Go 묘공단 스터디] Switch문  (0) 2023.11.14
[Go 묘공단 스터디] 조건문  (0) 2023.11.08
[Go 묘공단 스터디] 상수  (0) 2023.11.08