이 글은 Effective Go를 일부 번역한 글입니다.


이름

이름은 Go에서도 다른 언어와 마찬가지로 중요하다. 이름은 심지어 의미에 영향을 주기도 한다. 패키지 밖에서 이름을 보려면 첫 글자를 대문자로 해야 하기 때문이다. 그러니 Go 프로그램의 명명법에 대해 잠깐 이야기해보자.

획득자(Getter)

Go는 획득자와 설정자(Setter)를 자동으로 제공하지 않는다. 당신 스스로 획득자와 설정자를 만들어도 되며, 보통은 그렇게 하는 게 적절하다. 하지만 획득자 이름에 Get을 넣는 건 자연스럽지 않고 필요하지도 않다. 어느 영역(Field)을 owner(소문자, 내보이지 않음)로 이름했다면, 획득자를 GetOwner가 아닌 Owner(대문자, 내보임)로 이름하라. 내보일 이름을 대문자로 하여 영역과 메서드를 구별할 수 있다. 설정자가 필요하다면 SetOwner로 이름하라. 두 이름 모두 실제로 읽기에 좋다.

owner := obj.Owner()
if owner != user {
    obj.SetOwner(user)
}

인터페이스 이름

관례에 따라, 인터페이스의 메서드가 하나라면 메서드 이름 뒤에 er을 붙이는 등으로 수정해 행위자 명사를 만들어 이름한다. 예: Reader, Writer, Formatter, CloseNotifier 등등.

이런 이름은 여럿 있고, 그 이름과 그 이름이 다루는 함수 이름을 따르는 게 생산적이다. Read, Write, Close, Flush, String 등등은 표준 용법과 의미를 갖는다. 혼란을 피하기 위해, 당신의 메서드가 같은 용법과 의미를 가진 게 아니라면 같은 이름을 사용하지 말라. 반대로, 메서드를 친숙한 형식으로 구현했다면 같은 이름과 용법을 사용하라. 문자열로 변환하는 메서드를 만들었으면 ToString이 아니라 String으로 이름하라.

대문자 섞기

마지막으로, Go는 이름에 단어가 여러 개 들어갈 때 밑줄 대신 대문자를 섞어 쓴다. (예: MixedCaps, mixedCaps)