Что такое go generate?

Middle
711 просмотров
AFK Offer AI

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
Сгенерированные файлы коммитят в репо — CI не должен запускать go generate.

Следующий вопрос

Что такое GOGC?