- Аббревиатуры в названиях писать в одном регистре (например:
http
, HTTP
, extHTTP
, productID
)
- Названия констант, типов, переменных и функций писать в camel case/pascal case
- Названия импортов и пакетов писать в flat case
- Переменные ошибок должны начинаться с err/Err
- В названиях констант, функций и типов не использовать названия пакетов
- В качестве множеств использовать мапы пустых структур (
map[any]struct
)
- Прокидывать зависимости только через интерфейсы и только те что нужны (принцип "Accept interfaces, return structs")
- Не допускать больших функций в идеале функция должна помещаться на экран полностью
- Не допускать больших файлов (чем меньше кода в одном файле, тем меньше конфликтов)
- Не допускать больших модулей (поможет избежать циклических импортов)
- Использовать линтеры при написании кода (в проекте много ошибок)
- Если при создании слайса заранее известна длина создавать слайс этой длины (
make([]any, len)
)
- Если при создании слайса заранее известна максимальная длина выделять память под эту длину (
make([]any, 0, max_len)
)
- В случае создания динамического количества горутин, ограничивать максимальное количество созданных и работающих горутин, например через паттерн worker pool
- Комментария в коде необходимо писать на русском языке, кроме спец. слов для godoc
- Текст ошибок, которые идут в логи(а также алармы или любые другие внутренние системы) должны быть на английском языке
- В именовании использовать английский язык
- При написании нового кода использовать новую архитектуру
- Методы, используемые только внутри пакета, должны быть приватными
- Для ключей типа any использовать кастомные типы
- Ограничение на длину строки 120
- Объявление методов, которые превышают 120, следует переносить на новую строку, правила переноса:
-
- Объявления методов с количеством аргументов 0-5: каждый аргумент на новой строке
func exampleFunc(
arg1 string,
arg2 int,
arg3 bool,
arg4 float64,
arg5 []string,
) {
}
-
- Объявления методов с количеством аргументов >5: открывающие и закрывающие скобки в отдельных строках,
аргументы равномерно в соответствии с ограничением в 120
func exampleFunc(
argForExampleFunc1 string, argForExampleFunc2 int, argForExampleFunc3 bool,
argForExampleFunc4 float64, argForExampleFunc5 []string, argForExampleFunc6 []string,
) {
}
- Вызовы методов превышающие 120 символов переносим: открывающие и закрывающие скобки в отдельных строках, аргументы
равномерно в соответствии с ограничением в 120
exampleFunc(
argForExampleFunc1, argForExampleFunc2, argForExampleFunc3, argForExampleFunc4, argForExampleFunc5
)
exampleFunc(
argForExampleFunc1, argForExampleFunc2, argForExampleFunc3,
argForExampleFunc4, argForExampleFunc5, argForExampleFunc6,
)