tgoop.com/goproglib/5943
Last Update:
📋 Чек-лист по синтаксису Go
Для разработчика на Go важно не только написать работающий код, но и сделать его понятным, чистым и соответствующим идиомам языка.
Составили для вас чек-лист, который поможет ускорить разработку в разы за счёт правильного и чистого кода.
• Используется правильный package — каждый файл начинается с корректного определения пакета
• Импорты сгруппированы и отсортированы (стандартная библиотека, внешние пакеты, внутренние)
• Константы и переменные объявлены с типами, где это необходимо (var
и const
)
• Используется короткое объявление переменных :=
в локальной области
• Функции имеют четкие и понятные имена (глаголы для действий)
• Используется явный возврат значений (не прячем error
)
• Обработка ошибок — всегда проверяется if err != nil
• Используются именованные возвращаемые значения для улучшения читаемости (по необходимости).
• Методы объявлены с указателем *Type
для изменения состояния (если нужно).
• Циклы for
написаны лаконично и с понятной логикой (без лишних вложенностей).
• Используется switch
вместо цепочек if-else
там, где это уместно.
• В условных выражениях нет лишних скобок — Go этого не требует.
• Структуры и интерфейсы объявлены с понятными именами.
• Используются теги для JSON, если структура используется для сериализации (json:"fieldName"
).
• Методы интерфейса определены минимально и по назначению.
• Композиция структур вместо наследования, где это возможно.
• Ошибки возвращаются явно из функций (return err
).
• Используются кастомные типы ошибок или fmt.Errorf с %w для обёртки ошибок.
• Важные ошибки логируются или обрабатываются на уровне вызова.
• Форматирование соответствует gofmt
/ goimports
.
• Лишние комментарии и неиспользуемые переменные удалены.
• Функции не слишком длинные — каждая отвечает за одну задачу.
• Использование defer
для освобождения ресурсов и закрытия файлов/соединений.
• Нет глобальных переменных, если это можно избежать.
• Пакеты не слишком большие, разделены по функционалу.
• Используются правильные уровни видимости: экспортируемые (с большой буквы) и неэкспортируемые элементы.
• Пакеты имеют README с описанием назначения (по возможности).
• Используются срезы и карты эффективно (избегаем ненужных копирований).
• Избегается выделение памяти в горячих циклах.
• Используются каналы и горутины с правильным управлением (контекст, тайм-ауты).
• Публичные функции, типы и пакеты имеют комментарии в формате GoDoc.
• Документы объясняют назначение и использование, а не только перефразируют имена функций.