InfoGrab DocsInfoGrab Docs

Go 표준 및 스타일 가이드라인

GitLab Go 프로젝트의 코드 스타일, 의존성 관리, 테스트, 오류 처리, 라이브러리 사용 등 Go 언어 가이드라인과 모범 사례를 설명합니다.

이 문서는 Go 언어 를 사용하는 GitLab 프로젝트의 다양한 가이드라인과 모범 사례를 설명합니다. GitLab은 Ruby on Rails 위에 구축되어 있지만, 적합한 프로젝트에서는 Go도 사용합니다. Go는 매우 강력한 언어로 많은 장점이 있으며, 디스크/네트워크 접근과 같은 IO가 많은 프로젝트, HTTP 요청, 병렬 처리 등에 가장 적합합니다. GitLab에는 Ruby on Rails와 Go 두 언어가 모두 사용되므로, 어떤 언어가 해당 작업에 더 적합한지 신중하게 평가해야 합니다. 이 페이지는 다양한 경험을 바탕으로 Go 가이드라인을 정의하고 정리하는 것을 목표로 합니다. 여러 프로젝트가 서로 다른 기준으로 시작되었으며 각각 고유한 특성이 있을 수 있습니다. 이러한 내용은 각 프로젝트의 README.md 또는 PROCESS.md 파일에 설명되어 있습니다. 프로젝트 구조 # Go 애플리케이션 프로젝트의 기본 레이아웃 에 따르면, 공식적인 Go 프로젝트 레이아웃은 없습니다. 하지만 Ben Johnson의 Standard Package Layout 에 좋은 제안들이 있습니다. 다음은 참고할 수 있는 GitLab Go 기반 프로젝트 목록입니다: Gitaly GitLab Agent for Kubernetes GitLab CLI GitLab Container Registry GitLab Operator GitLab Pages GitLab Runner GitLab Shell Workhorse Go 언어 버전 # Go 업그레이드 문서는 GitLab이 Go 바이너리 지원을 관리하고 제공하는 방법에 대한 개요 를 제공합니다. GitLab 컴포넌트에 새로운 버전의 Go가 필요한 경우, 고객, 팀 또는 컴포넌트에 부정적인 영향을 주지 않도록 업그레이드 프로세스 를 따르세요. 경우에 따라 개별 프로젝트에서도 여러 버전의 Go로 빌드를 관리 해야 할 수 있습니다. 의존성 관리 # Go는 의존성 관리를 위해 소스 기반 전략을 사용합니다. 의존성은 소스 리포지터리에서 소스로 직접 다운로드됩니다. 이는 의존성의 소스 리포지터리와 별개인 패키지 리포지터리에서 아티팩트로 의존성을 다운로드하는 일반적인 아티팩트 기반 전략과 다릅니다. Go는 1.11 이전에는 버전 관리에 대한 공식 지원이 없었습니다. 해당 버전에서 Go 모듈과 시맨틱 버전 관리 사용이 도입되었습니다. Go 1.12에서는 클라이언트와 소스 버전 관리 시스템 사이의 중간 역할을 할 수 있는 모듈 프록시와, 의존성 다운로드의 무결성을 검증하는 데 사용할 수 있는 체크섬 데이터베이스가 도입되었습니다. 자세한 내용은 Go의 의존성 관리 를 참조하세요. 코드 리뷰 # 우리는 Go Code Review Comments 의 공통 원칙을 따릅니다. 리뷰어와 메인테이너는 다음 사항에 주의해야 합니다: defer 함수: 필요한 경우 존재 여부 확인, err 검사 이후에 사용. 의존성을 매개변수로 주입. JSON으로 마샬링할 때 빈 구조체 ([] 대신 null`이 생성됨). 보안 # GitLab에서 보안은 최우선 사