- purpose
- sequence diagram
- how to run
- how to test
- how to deploy
- logging
- tracing
- metrics
- graceful shutdown
- liveness handler
- readyness handler
- version handler
- testable
- documents
- circuit breaker
- don't call panic
- log.Fatal only in main.go
- goroutine only in main.go
- defer recovery everytime in goroutine
- global variables beware about race conditions
- read config
- initial framework by config
- initial database by config
- initial http.client by config
- initial logger by config
- initial tracer
- graceful shutdown
- liveness handler
- readyness handler
- version handler
- X-Request-ID
- singerton and non blocking test
- get request
- call handler then get response & error
- return response to caller
- call dependencies then get response & error
- log all error with tracing-ID, crime-scence, course
- ?rollback
- ?circuit breaker
- ?rollback