go언어
글 수 53
2015.12.07 10:12:33 (*.39.166.169)
7644
이 글은 Effective Go를 일부 번역한 글입니다.
제어 구조
Go의 제어 구조는 C의 그것과 연관이 있지만 중요한 차이가 있다. do
와 while
반복이 없고 조금 일반화된 for
만 있다. switch
는 더 유연하다. if
와 switch
에도 for
처럼 초기화 문장을 넣을 수 있다. break
와
continue
문장엔 이름표를 붙여 벗어나거나 재개할 것을 지정할 수 있다. 또한 새롭게 type switch
와 다방향 통신 멀티플렉서 select
가 제어 구조에 추가되었다. 구문도 약간 다르다. 괄호가 없으며 본문은 반드시 항상 중괄호로 감싸야 한다.
If
Go에서 if를 간단히 쓰면 이렇다.
if x > 0 { return y }
중괄호를 강제해 간단히 if 문장을 여러 줄에 쓸 수 있다. 이런 방식은 특히 본문에 return이나 break 같은 제어문을 넣을 때 좋다.
if와 switch에 초기화 문장을 넣을 수 있다. 때문에 이 방식은 흔히 지역 변수를 설정하는 데 쓴다.
if err := file.Chmod(0664); err != nil { log.Print(err) return err }
Go 라이브러리를 보면, if 문장에서 그 다음 문장으로 넘어가지 않으면 (본문이 break, continue, goto, return으로 끝나는 경우) 필요 없는 else를 생략하는 걸 볼 수 있다.
f, err := os.Open(name) if err != nil { return err } codeUsing(f)
이 예제는 오류 조건이 연속적으로 있을 때 이를 처리해야 하는 코드에 대한 예제다. 이 코드는 제어 흐름이 성공적일 때 어떻게 흘러가는지, 오류가 발생하면 오류를 어떻게 처리하는지 읽기 쉽다. 오류 처리는 대개 return 문장으로 끝나기 때문에 결과적으로 이 코드엔 else를 넣지 않아도 된다.
f, err := os.Open(name) if err != nil { return err } d, err := f.Stat() if err != nil { f.Close() return err } codeUsing(f, d)