세미콜론(Semicolons)
- 원문: Semicolons
- 번역자: Jeongbu Yoon (@coma333ryu)
C언어 처럼, Go의 정식문법은 구문을 종료하기 위하여 세미콜론을 사용한다. 하지만 C언어와는 달리 세미콜론은 소스상에 나타나지 않는다. 대신 구문분석기(lexer)는 간단한 규칙을 써서 스캔을 하는 과정에 자동으로 세미콜론을 삽입한다. 그래서 소스작성시 대부분 세미콜론을 사용하지 않는다.
규칙은 다음과 같다. 만약 새로운 라인 앞의 마지막 토큰이 (int나 float64와 같은 단어를 포함한) 식별자이거나, 숫자, 문자열과 같은 기본 리터럴, 혹은 다음의 토큰들중 하나 일 경우에, 구문 분석기(lexer)는 항상 토큰 다음에 세미콜론을 추가한다.
break continue fallthrough return ++ -- ) }
이것은 "만약 구문을 끝낼 수 있는 토큰뒤에 새로운 라인이 오면, 세미콜론을 삽입하라." 와 같이 요약해서 설명할 수 있다.
세미콜론은 또한 닫는 중괄호(}) 바로 앞에서 생략할 수 있다. 예를들어 아래의 구문은 세미콜론이 필요하지 않는다.
go func() { for { dst <- <-src } }()
Go 프로그램에서는 세미콜론을 for loop 구문에서 변수 초기화와 조건, 그리고 진행 변수를 구분할때에만 사용 한다. 또한 세미콜론은 한 라인에서 여러문장을 구분하기 위해 필요하고, 이런 방법으로 코드를 작성해야한다.
세미콜론 입력규칙의 중요한 한가지는 제어문(if, for, switch, 혹은 select)의 여는 중괄호({)를 다음 라인에 사용하지 말아야 한다는 것이다. 만약 그렇게 사용하게 되면, 세미콜론은 중괄호({) 앞에 추가될것이고, 예상하지 못한 영향을 발생시킬 것이다. 다음과 같이 작성하라.
if i < f() {
g()
}
다음과 같이 사용하지 말라.
if i < f() // wrong!
{ // wrong!
g()
}