반응형

Go 제어문

I. If 문

  • boolean 검사만 가능 (명시적으로 True/False가 나오도록 구현)
  • 소괄호 사용 X

1. 기본 사용법

func main()  {

    if 조건1 {
        실행1
    } else if 조건2 {
        실행2
    } else {
        실행3
    }

2. 주의사항

  • 괄호 줄 바꿈 금지
    go는 바이트코드로 바꾸며 자동으로 세미콜론을 붙이는데, 이때 줄 바꿈을 하는 경우
    if (조건); {실행} ; 과 같이 인식되기 때문

    func main()  {
      a := 10
    
      if a > 10 
      {
          fmt.Println("10보다 크다")
      }
    }
    >>> go run main.go
    raise error
  • 괄호 생략 불가
    java등에서는 조건이 하나인 경우 괄호를 생략 가능한 경우가 있는데 go는 반드시 괄호가 포함돼야 함

    func main()  {
      a := 10
    
      if a > 10 
          fmt.Println("10보다 크다")
    }
    >>> go run main.go
    raise error
  • 조건은 반드시 bool형태

    func main()  {
      if c:= 1; c {
          fmt.Println(c)
      } 
    }
    >>> go run main.go
    raise error

II. switch

  • switch 뒤 표현식 생략 가능(단, 사용이 권장됨)
  • case 뒤 표현식 사용 가능
  • type 분기 가능
  • fallthrough 지원 -> 조건에 대응되는 case문의 다음 case문 함께 실행(맨 마지막 case문에는 사용이 불가하며 예외처리에 사용)

1. 기본 사용법

package main

func main() {
    switch exp {
    case exp1 :
        result1
        fallthrough
    case exp2 :
        result2
    default :
        default_result
    }
}

III. for

  • go의 반복문은 for문이 유일하다

1. 기본 사용법

  • 기본 for문
package main

func for1(){
    for i := 0; i < 10; i++ {
        result
    }
}

i := 0
func for2(){
    for i < 10; {
        result
        i++
    }
}
  • 무한루프
    조건을 사용하지 않으면 무한루프 형식
func main(){
    for {
        result
    }
}
  • range 사용
func main(){
    car := []string("bmw", "audi", "toyota")
    for idx, name := range car {
        fmt.Prinln(idx, ":", name)
    }
}
  • break 사용 == while문 처럼 사용
func main(){
    for {
        if i > 100 {
            break
        }
        i++
    }
}
  • Loop 사용
    continue/break에 걸리면 지정된 항목으로 이동
func main() {
Loop1:
    for i := 0; i < 5; i++ {
        for j := 0; j < 5; j++ {
            if i == 2 && j == 4 {
                break Loop1
            }
        }
    }
}
func main() {
Loop2:
    for i := 0; i < 3; i++ {
        for j := 0; j < 3; j++ {
            if i == 1 && j == 2 {
                continue Loop2
            }
            fmt.Println("loop2", i, j)
        }
    }
}

2. 주의사항

  • 괄호 줄바꿈 금지
  • 괄호 생략 불가
  • 수치 연산은 반환값이 없음을 유의
for i,j := 0,0; i <= 10; i = i+1, j = j+1{
    "에러 발생 X"
}

for i,j := 0,0; i <= 10; i++, j += 1 {
    "에러 발생"
}
반응형
복사했습니다!