표현식 문장

표현식 문장 (Expression statements)

함수나 메서드의 반환값을 당장 쓰지 않고 호출만 하고 싶은 경험, 다들 있죠. Go에서는 특정 내장 함수들만 빼고, 함수·메서드 호출수신 연산을 문장 자리에서 그대로 쓸 수 있어요. 이런 문장은 괄호로 감싸도 괜찮아요.

출처: Go Specification

본문

예를 들어 h(x+y)처럼 무언가를 호출하거나, f.Close()처럼 메서드를 부르거나, 채널에서 값을 받는 <-ch 같은 연산은 독립적인 문장으로 둘 수 있어요. 문법으로는 ExpressionStmt가 그걸 나타내는데, 그냥 Expression 뒤에 마침표가 붙는 형태예요:

ExpressionStmt = Expression .

아래 내장 함수들은 문장 자리에서 쓸 수 없어요. 값을 만들어 내는 것들이라, 호출 결과를 문장처럼 버릴 수 없게 막아 둔 거예요:

append cap complex imag len make max min new real
unsafe.Add unsafe.Alignof unsafe.Offsetof unsafe.Sizeof unsafe.Slice unsafe.SliceData unsafe.String unsafe.StringData

그래서 이런 코드는 어떻게 되는지 볼게요. 앞의 세 줄은 값이 필요한 연산이 아니라 그냥 실행만 한다는 뜻이라 문장으로 잘 성립해요. 마지막 줄에서 len("foo")len이 내장 함수일 때는 허용되지 않아요:

h(x+y)
f.Close()
<-ch
(<-ch)
len("foo")  // illegal if len is the built-in function

더 알아보기

  • 함수·메서드 호출이 어떻게 이뤄지는지가 궁금하다면 Calls 문서를 보세요.
  • 채널에서 값을 받는 연산은 Receive operator에서 자세히 다뤄요.