티스토리 뷰

공식 문서 : https://google.github.io/styleguide/go
Overview | Guide | DecisionsBest practices
 

개요

Go 스타일 가이드와 관련 문서들은 가독성이 좋고 관용적인 Go 코드를 작성하기 위한 현재 최적의 접근 방식을 정리합니다. 스타일 가이드는 절대적인 규칙이 아니며, 이 문서들이 모든 것을 포괄하지는 않습니다. 이 가이드의 목표는 Go를 처음 접하는 사람들이 흔히 저지르는 실수를 줄이는 것입니다. 스타일 가이드는 또한 Google의 Go 코드 리뷰어들이 제공하는 스타일 지침을 통일하는 역할을 합니다.

Style Guidehttps://google.github.io/styleguide/go/guide모든 사람
Style Decisionshttps://google.github.io/styleguide/go/decisions가독성 멘토아니오
Best Practiceshttps://google.github.io/styleguide/go/best-practices관심 있는 사람들아니오아니오

 

문서들

  1. Style Guide는 Google의 Go 스타일의 기본을 설명합니다. 이 문서는 결정적이며, Style Decisions와 Best Practices에서 제공되는 추천 사항의 기초로 사용됩니다.
  2. Style Decisions는 특정 스타일에 대한 결정 사항을 요약하고, 필요할 경우 결정의 이유를 설명하는 자세한 문서입니다.
    새로운 데이터, 언어 기능, 라이브러리 또는 패턴이 생길 때 때때로 이러한 결정이 변경될 수 있지만, Google의 개별 Go 프로그래머들이 이 문서를 지속적으로 업데이트할 필요는 없습니다.
  3. Best Practices는 일반적인 문제를 해결하고, 가독성이 좋으며, 유지 관리가 용이한 코드 패턴을 설명합니다.
    이 베스트 프랙티스는 표준적인 것은 아니지만, Google의 Go 프로그래머들이 코드베이스를 일관성 있게 유지하기 위해 가능하다면 사용하는 것이 권장됩니다.

이 문서들의 목적은 다음과 같습니다:

  • 다양한 스타일을 비교하는 원칙들을 합의합니다.
  • Go 스타일의 확립된 사항들을 체계화합니다.
  • Go 관용구에 대한 표준 예제를 제공합니다.
  • 다양한 스타일 결정의 장단점을 문서화합니다.
  • Go 가독성 리뷰에서 발생할 수 있는 놀라움을 최소화합니다.
  • 가독성 멘토들이 일관된 용어와 지침을 사용할 수 있도록 돕습니다.

이 문서들은 다음을 목표로 하지 않습니다:

  • 가독성 리뷰에서 제공할 수 있는 모든 의견을 망라하는 것
  • 모든 사람이 항상 기억하고 따라야 할 모든 규칙을 나열하는 것
  • 언어 기능과 스타일의 좋은 판단을 대체하는 것
  • 스타일 차이를 제거하기 위해 대규모 변경을 정당화하는 것

Go 프로그래머 간에는, 팀의 코드베이스 간에도 차이가 있을 수 있습니다. 하지만 Google과 Alphabet의 코드베이스가 최대한 일관성을 유지하는 것이 최선입니다. (일관성에 대한 자세한 내용은 guide를 참조하세요.) 따라서 필요할 때 스타일 개선을 해도 좋지만, 발견된 모든 스타일 가이드 위반 사항을 지나치게 지적할 필요는 없습니다. 특히, 이 문서는 시간이 지남에 따라 변경될 수 있으므로 기존 코드베이스에 불필요한 혼란을 야기할 필요는 없습니다. 새로운 코드를 작성할 때 최신의 베스트 프랙티스를 사용하고, 가까운 곳의 문제들을 시간에 맞춰 해결하면 충분합니다.

스타일 문제는 본질적으로 개인적인 것이며, 항상 상호간의 절충점이 존재함을 인식하는 것이 중요합니다. 이 문서의 많은 지침은 주관적이지만, gofmt와 마찬가지로 제공되는 일관성에 큰 가치가 있습니다. 따라서 이러한 스타일 권장사항은 충분한 논의 없이 변경되지 않으며, Google의 Go 프로그래머들은 개인적인 견해와 관계없이 스타일 가이드를 따르는 것이 권장됩니다.

 

정의

다음 단어들은 스타일 문서 전반에서 사용되며, 아래와 같이 정의됩니다:

  • Canonical: 규범적이고 오래 지속되는 규칙을 정립
    이 문서에서 "canonical"은 모든 코드(기존 및 신규 코드)가 따라야 하는 표준을 의미하며, 시간이 지나도 크게 변하지 않을 것으로 예상되는 요소를 나타냅니다. Canonical 문서의 원칙은 작성자와 리뷰어 모두가 이해해야 하므로, 이러한 문서에 포함되는 내용은 높은 기준을 충족해야 합니다. 이 때문에 Canonical 문서는 일반적으로 비-Canonical 문서보다 짧고, 스타일 요소의 수가 적습니다.
  • https://google.github.io/styleguide/go#canonical
  • Normative: 일관성을 확립하기 위한 것
    이 문서에서 "normative"는 Go 코드 리뷰어들이 일관된 용어, 제안, 그리고 정당성을 제공하기 위해 합의된 스타일 요소를 의미합니다. 이러한 요소는 시간이 지나면서 변경될 수 있으며, 문서들은 변경 사항을 반영하여 리뷰어들이 최신 정보를 유지할 수 있도록 합니다. Go 코드 작성자는 Normative 문서에 대해 숙지할 필요는 없지만, 가독성 리뷰에서는 이 문서가 자주 참고 자료로 사용될 것입니다.
  • https://google.github.io/styleguide/go#normative
  • Idiomatic: 일반적이고 친숙한 것
    이 문서에서 "idiomatic"은 Go 코드에서 널리 사용되고, 쉽게 인식될 수 있는 친숙한 패턴을 나타냅니다. 일반적으로 같은 목적을 가진 경우에는 비관용적인 패턴보다 관용적인 패턴을 사용하는 것이 독자에게 더 친숙하기 때문에 선호됩니다.
  • https://google.github.io/styleguide/go#idiomatic

 

추가 참고 자료

이 가이드는 독자가 Effective Go에 익숙하다는 것을 전제로 합니다. Effective Go는 전체 Go 커뮤니티의 Go 코드에 대한 공통 기준을 제공합니다.
아래에는 Go 스타일에 대해 자가 학습하려는 사람들과 리뷰어들이 참고 자료로 활용할 수 있는 추가 자료들이 있습니다. Go 가독성 과정에 참여하는 사람들은 이 자료들을 숙지할 필요는 없으나, 가독성 리뷰에서 맥락으로 언급될 수 있습니다.
외부 참고 자료

관련 Testing-on-the-Toilet 기사

추가 외부 문서