This is a template repository for building REST APIs with Go. Click the "Use this template" button above to create your own repository based on this template.
This template includes everything you need to build a REST API with Go - logging, middleware, database setup, testing, and deployment configs.
- Structured logging
- Middleware (auth, CORS, etc.)
- Config management
- API docs with Swagger
- Docker setup
- GitHub Actions CI/CD
- Database migrations
- Tests
- Makefile for common tasks
The main ones are:
- gorilla/mux for routing
- go-playground/validator for request validation
- go-sql-driver/mysql for MySQL database access
- jmoiron/sqlx for enhanced database access
- Masterminds/squirrel for SQL builder
- golang-migrate/migrate for database migrations
- swaggo/swag for API documentation generation
- strechr/testify for writing easier test assertions
- mockery for generating mock interfaces
- uber/zap for structured logging
- prometheus/client_golang for metrics
- otel for observability
- jaeger for distributed tracing
Click the "Use this template" button at the top of this repository, or use GitHub CLI:
gh repo create my-go-api --template MitulShah1/golang-rest-api-template
git clone https://github.com/YOUR_USERNAME/my-go-api.git
cd my-go-api
After creating your repository, update these files:
go.mod
- Update module nameREADME.md
- Update project name and description.github/workflows/go.yml
- Update repository references if neededdocker-compose.yml
- Update service names if needed
make help # See all available commands
make env # Create .env file
make docker_up # Start with Docker
make test # Run tests
golang-microservice-template/
βββ cmd/
β βββ server/ # Main entry point for the service
β β βββ main.go
βββ config/
β βββ config.go # Application configuration
βββ docs/ # API documentation
βββ internal/
β βββ handlers/ # HTTP handlers
β β βββ server.go # HTTP server
β βββ services/ # Business logic
β βββ repository/ # Data access layer
βββ package/ # Utility packages (database, logging, middleware, etc.)
β βββ database/
β β βββ database.go
βββ β βββmigrations/ # Database migrations
β βββ logger/
β β βββ logger.go
β βββ middleware/
β β βββ basic_auth.go # Basic authentication middleware
β β βββ cors.go # CORS middleware
β βββ βββ promotheus.go # Prometheus metrics
βββ test/
β βββ e2e/ # End-to-end tests
βββ Dockerfile # Docker build configuration
βββ docker-compose.yml # Docker Compose setup
βββ Makefile # Build automation
βββ go.mod # Go module dependencies
βββ go.sum # Dependencies lock file
βββ README.md # Project documentation
- Go 1.21+
- Docker and Docker Compose
- Make
To Check All Commands:
make help
1; Clone the repository
git clone https://github.com/MitulShah1/golang-rest-api-template.git
2; Create .env file from .env.example add details
make env
3; Start the application using Docker Compose
make docker_up
Build the application:
make build
Run tests:
make test
Generate API documentation:
make generate_docs
Create Migration:
make create_migration
Run Migrations:
make migration_up
Down Migrations:
make migration_down
Configuration is managed through .env
. Environment variables can override these settings.
API documentation is generated using Swagger. The documentation is available at http://localhost:8080/swagger/index.html
.
Prometheus metrics are exposed at http://localhost:8080/metrics
.
- Unit tests are alongside the code
- Integration tests are in the
test/
directory - Run all tests with
make test
The project includes:
- Dockerfile for containerization
- docker-compose.yml for local development
- GitHub Actions for CI/CD pipeline
- Fork the repository
- Create your feature branch
- Commit your changes
- Push to the branch
- Create a new Pull Request
This project is licensed under the MIT License - see the LICENSE file for details