go generate — запускает команды, указанные в комментариях //go:generate перед сборкой. Не является частью go build.
//go:generate stringer -type=Color
//go:generate mockgen -source=repo.go -destination=mock_repo.go
//go:generate protoc --go_out=. schema.proto
type Color int
const (
Red Color = iota
Green
Blue
)
Запуск:
go generate ./... # все пакеты
go generate ./internal/... # конкретная директория
Типичные кейсы:
- stringer — генерация
String()для enum - mockgen — моки интерфейсов для тестов
- sqlc — типобезопасные SQL-запросы
- protoc/buf — gRPC код из proto-файлов
- embed — хотя для embed есть
//go:embed
go generate.