Какие статические анализаторы и линтеры вы используете в Go для предотвращения ошибок?

Ответ

Статические анализаторы (линтеры) — это ключевые инструменты для поддержания качества кода и предотвращения ошибок еще до его запуска. В экосистеме Go наиболее популярны следующие:

  1. golangci-lint — это де-факто стандарт в индустрии. Это не один линтер, а агрегатор, который запускает множество других линтеров (включая go vet, staticcheck, errcheck и десятки других) параллельно и очень быстро. Его главные преимущества:

    • Скорость: Использует кеширование и параллельный запуск.
    • Конфигурация: Гибко настраивается через файл .golangci.yml, позволяя включать/выключать линтеры и правила.
    • Интеграция: Легко встраивается в CI/CD пайплайны и IDE.
  2. go vet — встроенный в тулчейн Go статический анализатор. Проверяет код на наличие подозрительных конструкций и распространенных ошибок, таких как:

    • Неправильное использование аргументов в Printf.
    • Ошибки в тегах структур.
    • Бесполезные присваивания.
      # go vet обнаружит несоответствие типа (%s вместо %d)
      # fmt.Printf("%s", 42)
      go vet ./...
  3. staticcheck — один из самых мощных и продвинутых статических анализаторов для Go. Находит сотни типов проблем, включая:

    • Неиспользуемый код.
    • Возможные nil-паники.
    • Упрощаемые конструкции и баги производительности.
    • Проблемы с конкурентностью.
  4. errcheck — специализированный линтер, который проверяет, что вы не игнорируете возвращаемые ошибки. Очень полезен для поддержания чистоты кода.