summaryrefslogtreecommitdiff
path: root/content/pages/gostyleguide/google/_index.md
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--content/pages/gostyleguide/google/_index.md179
1 files changed, 178 insertions, 1 deletions
diff --git a/content/pages/gostyleguide/google/_index.md b/content/pages/gostyleguide/google/_index.md
index f28cb04..f773eb9 100644
--- a/content/pages/gostyleguide/google/_index.md
+++ b/content/pages/gostyleguide/google/_index.md
@@ -1,5 +1,4 @@
---
-order: 4
title: Google Go Style Guide
---
@@ -8,3 +7,181 @@ title: Google Go Style Guide
Оригинал: https://google.github.io/styleguide/go
<!--more-->
+
+<!--more -->
+
+Руководство по стилю Go и сопутствующие документы кодифицируют современные
+наилучшие подходы к написанию читаемого и идиоматичного кода на Go. Следование
+Руководству по стилю не является абсолютным требованием, и эти документы никогда
+не будут исчерпывающими. Наша цель — минимизировать неопределённость при
+написании читаемого кода на Go, чтобы новички в языке могли избежать
+распространённых ошибок. Руководство по стилю также служит для унификации
+рекомендаций по стилю, даваемых любым рецензентом кода Go в Google.
+
+| Документ | [Нормативный] | [Канонический] |
+| ----------------------------------------------------------------- | ------------- | -------------- |
+| [**Руководство по стилю**](/pages/gostyleguide/google/guide/) | Да | Да |
+| [**Решения по стилю**](/pages/gostyleguide/google/decisions/) | Да | Нет |
+| [**Лучшие практики**](/pages/gostyleguide/google/best-practices/) | Нет | Нет |
+
+[Нормативный]: #нормативный
+[Канонический]: #канонический
+
+<a id="docs"></a>
+
+### Документы
+
+1. **[Руководство по стилю](/pages/gostyleguide/google/guide)**
+ описывает основы стиля Go в Google. Этот документ является окончательным и
+ служит основой для рекомендаций в «Решениях по стилю» и «Лучших практиках».
+
+1. **[Решения по стилю](/pages/gostyleguide/google/decisions)** —
+ это более подробный документ, который суммирует решения по конкретным
+ вопросам стиля и, где уместно, обсуждает обоснование этих решений.
+
+ Эти решения могут иногда меняться на основе новых данных, новых возможностей
+ языка, новых библиотек или возникающих паттернов, но не ожидается, что
+ отдельные программисты Go в Google должны следить за актуальностью этого
+ документа.
+
+1. **[Лучшие практики](/pages/gostyleguide/google/best-practices)**
+ документируют некоторые паттерны, которые развивались со временем для
+ решения общих задач, хорошо читаются и устойчивы к потребностям поддержки
+ кода.
+
+ Эти лучшие практики не являются каноническими, но программистам Go в Google
+ рекомендуется использовать их там, где это возможно, для сохранения
+ единообразия и согласованности кодовой базы.
+
+Эти документы призваны:
+
+- Согласовать набор принципов для оценки альтернативных стилей
+- Кодифицировать устоявшиеся вопросы стиля Go
+- Документировать и предоставить канонические примеры идиом Go
+- Документировать плюсы и минусы различных решений по стилю
+- Помочь минимизировать неожиданности при рецензировании читаемости кода Go
+- Помочь наставникам по читаемости использовать согласованную терминологию и
+ рекомендации
+
+Эти документы **не** призваны:
+
+- Быть исчерпывающим списком замечаний, которые можно дать при рецензировании
+ читаемости
+- Перечислять все правила, которые каждый должен помнить и всегда соблюдать
+- Заменять здравый смысл при использовании возможностей языка и стиля
+- Оправдывать масштабные изменения для устранения различий в стиле
+
+Всегда будут существовать различия между разными программистами Go и между
+кодовыми базами разных команд. Однако в интересах Google и Alphabet, чтобы наша
+кодовая база была как можно более согласованной. (Подробнее о согласованности
+см. [руководство](https://neonxp.ru/pages/gostyleguide/google/guide/#consistency)). В связи с этим не стесняйтесь вносить
+улучшения стиля по мере необходимости, но вам не нужно придираться к каждому
+нарушению Руководства по стилю, которое вы обнаружите. В частности, эти
+документы могут меняться со временем, и это не повод вызывать лишнюю суету в
+существующих кодовых базах; достаточно писать новый код, используя новейшие
+лучшие практики, и со временем устранять проблемы поблизости.
+
+Важно понимать, что вопросы стиля по своей природе субъективны и всегда
+сопряжены с компромиссами. Большая часть рекомендаций в этих документах
+субъективна, но, как и в случае с `gofmt`, в обеспечиваемом ими единообразии
+есть значительная ценность. Поэтому рекомендации по стилю не будут меняться без
+должного обсуждения, и программистам Go в Google рекомендуется следовать
+руководству по стилю, даже если они с чем-то не согласны.
+
+<a id="definitions"></a>
+
+## Определения
+
+Ниже приведены определения следующих слов, которые используются во всех
+документах по стилю:
+
+- **Канонический**: Устанавливает предписывающие и долговечные правила <a
+ id="canonical"></a>
+
+ В этих документах «канонический» используется для описания чего-либо, что
+ считается стандартом, которому должен следовать весь код (старый и новый) и
+ который не должен существенно меняться с течением времени. Принципы в
+ канонических документах должны быть понятны как авторам, так и рецензентам,
+ поэтому всё, что включается в канонический документ, должно соответствовать
+ высоким стандартам. Как таковые, канонические документы обычно короче и
+ предписывают меньше элементов стиля, чем неканонические документы.
+
+ https://google.github.io/styleguide/go#canonical
+
+- **Нормативный**: Призван установить согласованность <a id="normative"></a>
+
+ В этих документах «нормативный» используется для описания чего-либо, что
+ является согласованным элементом стиля для использования рецензентами кода
+ Go, чтобы предложения, терминология и обоснования были последовательными.
+ Эти элементы могут меняться со временем, и эти документы будут отражать
+ такие изменения, чтобы рецензенты могли оставаться последовательными и в
+ курсе событий. От авторов кода на Go не ожидается знакомства с нормативными
+ документами, но рецензенты будут часто использовать их в качестве
+ справочного материала при проверке читаемости.
+
+ https://google.github.io/styleguide/go#normative
+
+- **Идиоматичный**: Распространённый и знакомый <a id="idiomatic"></a>
+
+ В этих документах «идиоматичный» используется для обозначения чего-либо, что
+ широко распространено в коде на Go и стало знакомым паттерном, который легко
+ узнать. В целом, идиоматичный паттерн следует предпочитать неидиоматичному,
+ если оба служат одной цели в контексте, поскольку именно это будет наиболее
+ знакомо читателям.
+
+ https://google.github.io/styleguide/go#idiomatic
+
+<a id="references"></a>
+
+## Дополнительные ссылки
+
+Данное руководство предполагает, что читатель знаком с [Effective Go], поскольку
+оно обеспечивает общую основу для кода на Go во всём сообществе Go.
+
+Ниже приведены некоторые дополнительные ресурсы для тех, кто хочет
+самостоятельно изучить стиль Go, и для рецензентов, желающих предоставить в
+своих отзывах дополнительный контекст с ссылками. От участников процесса
+проверки читаемости Go не ожидается знакомства с этими ресурсами, но они могут
+упоминаться в качестве контекста при таких проверках.
+
+[Effective Go]: https://go.dev/doc/effective_go
+
+**Внешние ссылки**
+
+- [Спецификация языка Go](https://go.dev/ref/spec)
+- [Часто задаваемые вопросы по Go](https://go.dev/doc/faq)
+- [Модель памяти Go](https://go.dev/ref/mem)
+- [Структуры данных в Go](https://research.swtch.com/godata)
+- [Интерфейсы в Go](https://research.swtch.com/interfaces)
+- [Поговорки Go](https://go-proverbs.github.io/)
+
+- <a id="gotip"></a> Выпуски Go Tip — следите за обновлениями.
+
+- <a id="unit-testing-practices"></a> Практики модульного тестирования —
+ следите за обновлениями.
+
+**Соответствующие статьи Testing-on-the-Toilet**
+
+- [TotT: Именование идентификаторов][tott-431]
+- [TotT: Тестирование состояния vs. Тестирование взаимодействий][tott-281]
+- [TotT: Эффективное тестирование][tott-324]
+- [TotT: Тестирование, основанное на рисках][tott-329]
+- [TotT: Детекторные тесты считаются вредными][tott-350]
+
+[tott-431]: https://testing.googleblog.com/2017/10/code-health-identifiernamingpostforworl.html
+[tott-281]: https://testing.googleblog.com/2013/03/testing-on-toilet-testing-state-vs.html
+[tott-324]: https://testing.googleblog.com/2014/05/testing-on-toilet-effective-testing.html
+[tott-329]: https://testing.googleblog.com/2014/05/testing-on-toilet-risk-driven-testing.html
+[tott-350]: https://testing.googleblog.com/2015/01/testing-on-toilet-change-detector-tests.html
+
+**Дополнительные внешние материалы**
+
+- [Go и догма](https://research.swtch.com/dogma)
+- [Меньше — значит экспоненциально
+ больше](https://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html)
+- [Воображение
+ Эсмеральды](https://commandcenter.blogspot.com/2011/12/esmereldas-imagination.html)
+- [Регулярные выражения для синтаксического
+ анализа](https://commandcenter.blogspot.com/2011/08/regular-expressions-in-lexing-and.html)
+- [Стиль Gofmt никому не нравится, но Gofmt нравится
+ всем](https://www.youtube.com/watch?v=PAAkCSZUG1c&t=8m43s) (YouTube)