Go Service Scaffolder
Create a production-ready Go HTTP service skeleton and keep outputs consistent.
Workflow
- Ask for required inputs:
- App name (kebab-case)
- Go module path
- GitHub owner/org
- If the user asks for database support, ask which database to scaffold: Postgres, SQLite, or both.
- Derive:
CONFIG_ENV_VAR: uppercase app name without hyphens +_CONFIGMETRICS_PREFIX: lowercase app name without hyphens
-
Generate the full project file tree and file contents using the canonical spec in
references/go-service-scaffold-spec.md. -
Replace placeholders everywhere:
{{APP_NAME}}{{MODULE_PATH}}{{GITHUB_OWNER}}{{CONFIG_ENV_VAR}}{{METRICS_PREFIX}}
Database constraints when database support is requested:
- Never use an ORM.
- For Postgres, use PGX:
github.com/jackc/pgx/v5. - For SQLite, use
modernc.org/sqlite.
- Run:
go mod init <module-path>(only ifgo.moddoes not already exist)go mod tidygo get -tool github.com/italypaleale/go-kit/tools/gen-config(adds thetooldirective used bymake gen-config)make gen-configto produceconfig.mdandconfig.sample.yamlfrom theConfigstructgo test ./...
- Initialize git only when needed:
- Run
git initonly if the target directory is not already a git repository.
Whenever pkg/config.Config (or any struct reachable from it) is regenerated or edited later, re-run make gen-config so config.md and config.sample.yaml stay in sync. CI enforces this with make check-config-diff.
Reference
Use references/go-service-scaffold-spec.md as the single source of truth for:
- Required directory structure
- Exact file templates
- Post-scaffold steps and architecture notes
Load only the sections needed for the current task instead of reading the entire reference at once.
Scan to join WeChat group