go vet — статический анализатор, находит подозрительные конструкции, которые компилируются, но скорее всего баги.
go vet ./... # проверить всё
go vet ./internal/... # конкретный пакет
Что находит:
- Printf: несовпадение формата и аргументов (
%dдля строки) - Копирование мьютекса:
var mu2 = mu1(mutex нельзя копировать) - Unreachable code: код после return
- Shadowed variables:
err :=внутри if скрывает внешний err - Struct tags: невалидные json-теги
- Nil function comparison:
f == nilгде f — функция
// go vet найдёт:
fmt.Printf("%d", "hello") // строка с %d
var mu sync.Mutex
mu2 := mu // копирование mutex
go vet включён в go test по умолчанию. В CI обычно используют golangci-lint, который включает go vet + десятки других линтеров.