삽질의 현장/- Go

Practical Go - Project Structure

shovelman 2020. 12. 20. 21:58

패키지와 마찬가지로 명학한 목적으로 구성되어있어야 한다.

여러 목적을 단일 프로젝트로 결합하는 것을 피해야 한다.

Consider fewer, larger packages

더 적고 더 큰 패키지를 고려하라. 즉, 지나치게 복잡한 패키지 계층 생성을 하지 않기 위한 관행이 있다.

cmd/ internal/ 을 제외한 모든 패키지에는 일부 소스코드가 포함되어야 한다.

Java 패키지는 단일 .go 소스 파일과 동일하다. Go 패키지는 전체 Maven, Gradle 모듈과 동일하다.

Arrange code into files by import statements

하나의 .go 파일로 각 패키지를 시작하라. 해당 파일을 패키지와 동일한 이름으로 지정하라.

패키지가 커짐에 따라 다양한 책임을 다른 파일로 분리하라.

다른 파일은 패키지의 다른 영역을 담당해야 한다.

소스 파일 이름은 명사를 사용하라.

Go 컴파일러는 각 패키지를 병렬로 컴파일한다. 패키지 내에서 컴파일러는 각 함수를 병렬로 컴파일 한다. 패키지 내에서 코드 레이아웃을 변경해도 컴파일 시간에 영향을 주지 않는다.

Use internal packages to reduce your public API surface

내부 패키지를 사용하여 공용 API 표면 줄이기

Keep package main small as small as possible

패키지 메인을 가능한 작게 유지하라.

주요 기능과 주요 패키지는 가능한 한 적게 해야한다.

func main() 은 플래그를 구문 분석하고 데이터베이스, 로거 등에 대한 연결을 한 다음 실행을 상위 수준 객체로 넘겨야한다.

 

출처 : Practical Go: Real world advice for writing maintainable Go programs

'삽질의 현장 > - Go' 카테고리의 다른 글

Practical Go - Error handling  (0) 2020.12.20
Practical Go - API Design  (0) 2020.12.20
Practical Go - Package Design  (0) 2020.12.20
Practical Go - Comment  (0) 2020.12.20
Practical Go - Identifiers  (0) 2020.12.20