README ¶ Go project template This template provides a solid foundation for building scalable, observable, and maintainable Go services. Getting started Creating new project Fork this repo Create project repo using the fork as a template Clone the project repo and run make -f rename.mk Run make all to verify that everything works Create a PR see how the github workflow gets triggered Adding endpoints Add paths and components in server/openapi.yaml Run make generate Implement missing methods in [app/app.go] Adding tables Add new migration file {NUM}_{NAME}.up.sql eg 002_add_users_table.up.sql under store/migrations Write CREATE TABLE statement in that file Now your migration is automatically applied when application starts Project layout The template is structured to provide a solid foundation while allowing easy customization for your specific project needs. Go files ./api/ - rest api layer generated from openapi.yaml ./app/ - business logic that maps to rest endpoints inside api ./applicationtest/ - application/integration tests (tests executed against application binary) ./cmd/demo/ - main package for application, automatically renamed based on repo name ./server/ - configures http.Server with api handler ./store/ - database layer with migration support ./store/migrations/ - database schema migration files Non Go files ./.github/ - github actions workflow files ./.golanci.yaml - golangci-linter configuration ./.ogen.yaml - ogen generator configuration ./.codecov.yml - codecov configuration ./server/openapi.yaml - api specification ./server/swaggerui - swagger ui files ./docker-compose.yaml - configuration for services used in test ./Dockerfile - image definition for Go binaries ./Makefile - build tooling configuration ./ci.mk - build tooling configuration for CI only targets ./rename.mk - script to run rename after cloning initial template ./telemetry/ - configuration for otel related tools ./target/ - container for build and test artifacts Tooling Libraries go-srvc/srvc - Service library for life cycle management go-srvc/mods - Ready made modules for srvc golang-migrate - Database migration management jmoiron/sqlx - Mapping data between structs and SQL go-tstr/tstr - Testing library with application test support stretchr/testify - Test assertions automaxprocs - Set runtime CPU resources automatically automemlimit - Set runtime MEM resources automatically External Tools Make - Build automation Docker - For containerization and local testing Docker Compose - For local testing Go Tools (using go tool) golangci-lint - Code quality and style enforcement gotestsum - Test output formatter ogen - OpenAPI code generation with observability and validation CI GitHub Actions - CI workflows Codecov - Code coverage Expand ▾ Collapse ▴ Directories ¶ Show internal Expand all Path Synopsis api app cmd demo command server store Click to show internal directories. Click to hide internal directories.