표현식 문장
표현식 문장 (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에서 자세히 다뤄요.