콘텐츠로 이동

코드 스타일

go-zero는 표준 Go 관례를 따르며, 몇 가지 추가 가이드라인을 적용합니다.

모든 코드는 gofmt / goimports로 포맷해야 합니다.

Terminal window
goimports -w ./...

포맷 문제가 있으면 CI에서 PR이 거부됩니다.

요소관례예시
패키지짧고 소문자로 작성하며 밑줄을 쓰지 않음logx, httpx
인터페이스설명적인 명사 또는 -er 접미사UserModel, Breaker
생성자NewXxx 또는 MustNewXxxNewCache, MustNewServer
오류 변수ErrXxxErrNotFound, ErrTimeout
설정 구조체표준 기반 설정을 임베드RestConf, RpcServerConf
  • 오류를 조용히 무시하지 마세요.
  • fmt.Errorf("createUser: %w", err)처럼 컨텍스트를 포함해 오류를 감싸세요.
  • 타입 단언이 필요한 경우 패키지 수준에 정의된 sentinel error를 사용하세요.
  • 단위 테스트는 소스와 같은 패키지에 foo_test.go 형태로 둡니다.
  • table-driven test를 권장합니다.
  • mock은 mockgen으로 생성하거나 필요한 최소 스텁을 직접 작성합니다.
  • 새 패키지는 80% 이상의 커버리지를 목표로 합니다.
Terminal window
go test -race -coverprofile=coverage.out ./...
go tool cover -html=coverage.out
  • export되는 모든 심볼에는 문서 주석이 있어야 합니다.
  • 주석은 완전한 문장으로 쓰고 심볼 이름으로 시작합니다.
  • 의도가 분명하지 않은 로직에는 “왜” 그런지 설명하는 인라인 주석을 추가합니다.