Require thin cmd/ entrypoints: all logic in internal/ or pkg/ #54
@@ -124,10 +124,15 @@ last_modified: 2026-03-18
|
|||||||
|
|
||||||
1. Keep the `main()` function as small as possible.
|
1. Keep the `main()` function as small as possible.
|
||||||
|
|
||||||
1. Keep the `main` package as small as possible. Move as much code as is
|
1. Keep the `main` package as small as possible. Each `cmd/<name>/` directory
|
||||||
feasible to a library package, even if it's an internal one. `main` is just
|
contains a single `main.go` whose body is one call into library code (for
|
||||||
an entrypoint to your code, not a place for implementations. Exception:
|
example `os.Exit(cli.Main())` calling `internal/cli`). All CLI logic — flag
|
||||||
single-file scripts.
|
parsing, subcommand dispatch, argument handling, output formatting — lives
|
||||||
|
in `internal/` or `pkg/`, not in `cmd/`. `main` is just an entrypoint to
|
||||||
|
your code, not a place for implementations. Exception: single-file scripts.
|
||||||
|
|
||||||
|
1. No project logic outside `internal/` or `pkg/`. Anything in `cmd/` is a thin
|
||||||
|
entrypoint only.
|
||||||
|
|
||||||
1. HTTP HandleFuncs should be returned from methods or functions that need to
|
1. HTTP HandleFuncs should be returned from methods or functions that need to
|
||||||
handle HTTP requests. Don't use methods or your top level functions as
|
handle HTTP requests. Don't use methods or your top level functions as
|
||||||
|
|||||||
@@ -387,7 +387,9 @@ style conventions are in separate documents:
|
|||||||
language-specific config). Everything else goes in a subdirectory. Canonical
|
language-specific config). Everything else goes in a subdirectory. Canonical
|
||||||
subdirectory names:
|
subdirectory names:
|
||||||
- `bin/` — executable scripts and tools
|
- `bin/` — executable scripts and tools
|
||||||
- `cmd/` — Go command entrypoints
|
- `cmd/` — Go command entrypoints; thin only: one `main.go` per binary whose
|
||||||
|
body is a single call into `internal/` or `pkg/`, no project logic in
|
||||||
|
`cmd/`
|
||||||
- `configs/` — configuration templates and examples
|
- `configs/` — configuration templates and examples
|
||||||
- `deploy/` — deployment manifests (k8s, compose, terraform)
|
- `deploy/` — deployment manifests (k8s, compose, terraform)
|
||||||
- `docs/` — documentation and markdown (README.md stays in root)
|
- `docs/` — documentation and markdown (README.md stays in root)
|
||||||
|
|||||||
Reference in New Issue
Block a user