Стиль написания кода

  • Аббревиатуры в названиях писать в одном регистре (например: 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,
)