Skip to content
12 / 15

go vet: какие ошибки он ловит и почему это не линтер

go vet — часть тулчейна, и это принципиально: он ловит не стилистические огрехи, а конструкции, которые почти наверняка являются ошибкой, но синтаксически корректны. Отсюда его главное свойство — очень мало ложных срабатываний, поэтому его вывод не настраивают и не подавляют, а чинят. Что он находит: несоответствие формата и аргументов в Printf, копирование структур с мьютексом внутри, потерянный cancel от context.WithCancel, недостижимый код, тег структуры с опечаткой, сравнение несравнимых значений, неверную сигнатуру метода вроде String() string с получателем-указателем там, где ожидается значение. Отдельная важная деталь: go test автоматически запускает подмножество проверок vet перед компиляцией тестов, поэтому часть ошибок вы уже видите, не зная об этом. Линтеры вроде golangci-lint решают другую задачу — стиль, сложность, потенциальные проблемы с настраиваемым порогом, — и заменять ими vet не следует: они дополняют друг друга.

go vet: какие ошибки он ловит и почему это не линтер | JScriptiser