Naming은 다른 언어와 같이 Golang에서도 중요한 의미를 가진다. 패키지 외부로 공개하기 위해서는 First Character는 Upper case로 되어야 한다.(JAVA의 Public과 비슷한 개념)
Package names
패키지를 import 하려고할 때, 패키지명은 해당 컨텐츠의 접근자가 된다. 예를 들어 아래의 구문은 "bytes.Buffer"를 가져올 때 사용될 수 있다.
import "bytes"
패키지명은 source directory명을 base name로 가진다. 예를 들어 원하는 패키지가 src/encoding/base64 라면 encoding/base64로 import할 수 있다.
import "encoding/base64"
패키지를 import 할 때, 패키지는 해당 컨텐츠의 이름을 사용할텐데 → 그래서 외부로 노출되는 names는 반복을 피해 사용하도록 해야 한다. ("import ." 과 같은 표기는 사용하지 말것, 물론 그렇게 사용할 경우 테스트 중인 패키지 외부에서 실행해야 하는 테스트를 간소화할 수는 있지만, 그렇지 않으면 피하는 것이 좋다.) 예를들어, bufio 패키지의 buffered reader type은 Reader라고 사용될 것이다 BufReader가 아니라). 이렇게 사용하는 것이 Golang에서의 clear하고 concise한 표기법이다. 더 나아가 이렇게 표기하는 것이 다른 패키지와의 entity간 충돌을 방지하는 방법이다. (예를들어 bufio.Reader 와 io.Reader의 차이와 같다.)
Getters
Golang은 Getters와 Setters를 자동으로 생성해주지 않는다. 그렇다고 직접 Getters와 Setters를 작성하는 것이 잘못된 것이 아니며, 그렇게 하는 것이 적절한 경우가 많다. Golang에서는 또한 "Getters의 네이밍에 Get 이라는 관용어을 넣는 것이 일반적이다" 라고 단정하지는 않고 굉장히 자유로운 편이다.
owner := obj.Owner()
if owner != user {
obj.SetOwner(user)
}
Interface names
컨벤션에 따라, one-method 인터페이스는 보통 메서드명에 -er suffix 또는 메서드명과 비슷한 "agent noun"으로 맞추는 편이다. (예를들어 Reader, Writer, Formatter, CloseNotifier 등등이 있겠다.)
Golang도 역시 메소드의 용도에 따라 일반적으로 사용되는 naming을 사용하는 것은 굉장히 생산적이며 직관적이다. 예를들어 Read, Write, Close, Flush, String과 같은 것들이 있겠다. 예를들어 문자열 변환 메서드가 필요하다면 String을 사용하는 것을 권장한다. (ToString이 아니라)
MixedCaps
Golang에서의 컨벤션은 MixedCaps나 mixedCaps 형식을 사용하길 권장한다. underscores(_)나 multiword 네임은 지양하자
'Development > Golang' 카테고리의 다른 글
[Effective Go] functions (0) | 2021.11.30 |
---|---|
[Effective Go] Control Structures (0) | 2021.11.20 |