CLI
CLI Reference
The bkgo CLI scaffolds new projects and generates/removes modules following Hexagonal Architecture conventions.
Install
go install github.com/BounkhongDev/bkgo/cmd/bkgo@latestRequires Go 1.22+. The CLI binary is embedded with all templates — no separate files needed.
bkgo new
Scaffold a new Go project with the full bkgo structure.
bkgo new myapp
bkgo new myapp --module github.com/yourname/myappGenerated structure:
myapp/ ├── cmd/api/main.go ← wired app entry point ├── internal/ ← your modules go here ├── migrations/ ← SQL migration files ├── .env.example ← environment template ├── docker-compose.yml ← postgres + redis + minio ├── Makefile ← run, test, migrate targets ├── .gitignore └── go.mod
bkgo generate (g)
Generate a full module or individual files. Alias: g
Full module
bkgo generate module user
bkgo g module product
bkgo g module orderItem # camelCase → order_item packageGenerated files:
internal/user/ ├── domain.go ← entity struct + Repository interface (PORT) ├── usecase.go ← business logic (depends on PORT only) ├── handler.go ← Fiber HTTP handler + route registration ├── repository.go ← PostgreSQL implementation (ADAPTER) └── usecase_test.go ← unit test with mock.Database
Individual files
bkgo generate handler product
bkgo generate service product
bkgo generate repository productGenerates only the specified file inside internal/product/.
bkgo remove (rm)
Delete a module directory or individual files. Alias: rm
bkgo remove module user # deletes internal/user/ entirely
bkgo rm module user # same (rm alias)
bkgo remove handler product # deletes internal/product/handler.go
bkgo remove service product # deletes internal/product/usecase.go
bkgo remove repository product # deletes internal/product/repository.goName conventions
Module names are normalized automatically — you can pass any case:
| Input | Package (dir) | Struct name |
|---|---|---|
user | user | User |
orderItem | order_item | OrderItem |
order-item | order_item | OrderItem |
order_item | order_item | OrderItem |