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@latest

Requires 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/myapp

Generated 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 package

Generated 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 product

Generates 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.go

Name conventions

Module names are normalized automatically — you can pass any case:

InputPackage (dir)Struct name
useruserUser
orderItemorder_itemOrderItem
order-itemorder_itemOrderItem
order_itemorder_itemOrderItem