break        default      func         interface    select
case         defer        go           map          struct
chan         else         goto         package      switch
const        fallthrough  if           range        type
continue     for          import       return       var

break, default, case, defer, else, goto, switch, fallthrough, if, range, continue, for

25개 키워드 중에서 12개가 제어와 관련이 있다. 이말은 프로그래밍은 조건에 따라서 적절하게 제어하는 방법을 기술하는 것과 같다는 뜻이기도 하다.

if, else

if a > 0 {
    fmt.Println("a는 양수다")
}

idioms

//일반적인 사용 예
f, err := os.Open(name)
if err != nil {
    // 에러 발생시 처리 코드
    return //
}

//정상 처리 코드
//코드 가독성을 높이는 방법, 반환값이 여기에만 사용된다는 것을 명시적으로 드러냄 
if f, err := os.Open(name); err != nil {
    //....
    return 
}

for

//초기 조건, 진입 조건, 진입 후처리
for init; condition; post { }

//조건에 맞는 경우 반복
for condition { }

// 무한 반복
for { }
  • 10까지 합을 구하는 함수
  • 배열에 포함된 값의 총합 구하기

range

break, continue

switch, case, fallthrough

default

코드 읽기

  • 실제로 표준 라이브러리에서 사용 예
  • 오픈소스에서 사용 예

idioms

  • 제대로 쓰기 위한 tip

Quiz

  • 아래 코드의 결과를 예측하라!
package main

import "fmt"

func add (a int, b ...int) int {
   sum := 0
   for _, v := range b {
      sum+=v
   }
   return sum
}


func main() {
    fmt.Println(add(1, 2, 3))
    fmt.Println("Hello, 世界")
}
  • 왜 Go에서는 ...와 같은 가변길이 인자를 마지막에 넣도록 강제하고 있을까? 여러분의 추측은?

참고 자료

  • 동영상 자료