golangci-lint: набор линтеров и внедрение в существующий проект
golangci-lint — агрегатор: он запускает десятки анализаторов параллельно, переиспользуя разбор кода, и потому работает намного быстрее последовательного запуска. Набор по умолчанию консервативен (errcheck, govet, ineffassign, staticcheck, unused), а всё остальное включается осознанно. Полезный минимум сверх умолчания: errcheck для непроверенных ошибок, bodyclose для незакрытых тел ответов, rowserrcheck для базы, gosec для типовых уязвимостей, revive вместо устаревшего golint. Главный практический вопрос — как внедрить в существующий проект с тысячами замечаний, и ответ не «исправить всё разом»: используется режим --new-from-rev, при котором проверяются только строки, изменённые относительно указанной ревизии. Так линтер сразу становится обязательным для нового кода, а старый чинится постепенно. Конфигурация живёт в .golangci.yml и обязана коммититься, иначе локальный и конвейерный прогоны разойдутся.