module
Version:
v1.0.0
Opens a new window with list of versions in this module.
Published: Jun 5, 2025
License: MIT
Opens a new window with license information.
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
Example
You can test this with simple example spec by running:
mv ./server/openapi-simple.yaml ./server/openapi.yaml
make generate
And now just implement missing methods in ./app/app.go.
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
Libraries
- golangci-lint - Code quality and style enforcement
- gotestsum - Test output formatter
- ogen - OpenAPI code generation with observability and validation
CI
Directories
¶
|
|
|
Package app wraps the storage layer with application logic and provides an interface for API layer.
|
Package app wraps the storage layer with application logic and provides an interface for API layer. |
cmd
|
|
|
|
|
Package server wraps the application logic inside HTTP server.
|
Package server wraps the application logic inside HTTP server. |
Package store abstracts the database layer behind store.Store methods.
|
Package store abstracts the database layer behind store.Store methods. |
Click to show internal directories.
Click to hide internal directories.