В этой статье я сосредоточусь на некоторых функциях линтеров, доступных нам. Независимо от того, насколько вы хороши в программирование, всегда есть шанс, что вы что-то не знаете. Использование литеров — один из способов избежать ошибок прямо во время разработки.
На самом деле Golang уже предоставляет некоторые базовые инструменты, такие как gofmt, который занимается форматированием кода Go, и govet, который проверяет исходный код и помогает найти ошибки в коде.
Существует большое количество доступных линтеров, которые были созданы и поддерживаются сообществом GO. Давайте посмотрим на некоторые полезные линтеры:
- fieldaligment — хороший функционал для поиска утечки пмяти.
- unused — модуль помогаает проверять код Go на наличие неиспользуемых констант, переменных, функций и типов.
- gofumpt — инструмент представляет собой модифицированный форк gofmt начиная для Go 1.18.
- goconst — пакет находит повторяющиеся строки, которые можно заменить константой.
- gocyclo — вычисляет и проверяет цикломатическую сложность функций.
- goreporter — инструмент Golang, который выполняет статический анализ, модульное тестирование, проверку кода и создает отчет о качестве кода. Это инструмент, который одновременно запускает целую кучу линтеров и формирует их вывод в отчет.
- errcheck — обнаружение непроверенных ошибок в программах Go.
Наличие такого большого количества автономных литеров заключается в том, что вам нужно загружать их и управлять ими самостоятельно. Их запуск также очень медленный.
По указанным выше причинам golangci-lint, агрегатор линтеров Go, который запускает линтеры параллельно, повторно использует кеш сборки Go и кэширует данные для значительного повышения производительности при последующих запусках программы. golangci-lint отличный инструмет настройки линтинга в проектах Go.
golangci-lint— это ⚡ Очень быстрая ⚙️ конфигурация на основе Yaml, с множеством 🖥 интеграций и 🔥красивым выводом с цветами. Имеет 🥇 Много линтеров в комплекте, которые не нужно их отдельно устанавливать 😀
Установка
Запуск
Я намерен импортировать пакет, который я не использую, и надеюсь, что golangci-lint укажет мне на это.
Давайте запустим линтер
Скрипт автоматически обнаружил ошибку ( go в любом случае вывел бы ее на этапе сборки), однако вы можете видеть, что программа выполнила проверку, которую сделал бы другой линтер под названием goimport. Здесь мы используем агрегатор golangci-lint, который объединил большую часть функционала линтера.В golangci-lint доступно огромное количество линтеров, более 100, вот полный список.
Примечание. По умолчанию активируется только часть линтеров, большая их часть по умолчанию деактивирована, они могут быть включены по вами при еобходимости.
Если вы хотите увидеть доступный функционал, вы можете ввести:
Чтобы включить/отключить линтер
Инструкции по интеграции доступны здесь
Примеры конфигурации доступны здесь
Хотя большинство линтеров доступны, в пакетн недоступен литер fieldalignment, и на это есть веские причины.
Fieldalignment используется для определения того, правильно ли построена ваша структура с точки зрения памяти. Давайте посмотрим, как fieldalignment помогает в выявлении утечки памяти в Golang.
Надеюсь, что этот пост был полезен для предоставления некоторой информации о линтерах и о том, почему мы должны их использовать.
Удачного кодинга!