This repository provides a boilerplate for building RESTful APIs using the following technologies:
- Echo: A lightweight and fast Go web framework for HTTP routing and middleware support.
- GORM: The most popular Go ORM library for database interactions.
- Fx: A dependency injection framework for modular and scalable applications.
It offers a structured project layout to facilitate scalable and maintainable application development.
- Domain-Driven Design: The project separates interfaces and implementations by organizing interfaces in the
domain/
directory and their respective implementations in theinternal/
directory. - Echo Framework: Efficient HTTP routing and middleware support for fast REST API development.
- GORM Integration: Simplifies database access and ORM capabilities.
- Fx for Dependency Injection: Provides modular DI, making it easier to manage complex dependencies.
The project is organized as follows:
go-echo-template/ ├── cmd/ │ └── app/ # Main application entry point ├── config/ # Configuration files and settings ├── domain/ # Interfaces for each domain │ ├── user.go # Example: User-related interfaces │ ├── auth.go # Example: Authentication interfaces │ └── ... # Additional domain interfaces ├── internal/ # Implementations of the interfaces │ └── user/ # Example: User-related implementation │ ├── router/ # HTTP router implementation │ ├── usecase/ # Business logic implementations │ ├── store/ # Data store (e.g., DB) implementations │ └── ... # Additional domain-specific implementations ├── pkg/ # Reusable utility packages ├── Makefile # Build and run commands ├── README.md # Project documentation ├── go.mod # Go module file ├── go.sum # Go dependencies checksum
- Go 1.20+ installed on your machine.
- A tool like
Make
for running the commands in theMakefile
.
-
Clone the repository:
git clone https://github.com/omnia-core/go-echo-template.git cd go-echo-template
-
Install dependencies:
go mod tidy
-
Build the application:
make build
-
Run the application:
make run
The server will start, and you can access it at http://localhost:8080
.
Contains all the interfaces for the various domains of the application. These interfaces define the contract between different layers, ensuring a clear separation of concerns.
Examples:
user.go
: Defines methods related to user operations (e.g.,GetUser
,CreateUser
).auth.go
: Defines methods for authentication and authorization.
Holds the implementation of the interfaces defined in the domain/
directory.
Subdirectories:
router/
: Implements HTTP routes using the Echo framework.usecase/
: Contains business logic implementations.store/
: Implements data access (e.g., database queries) using GORM.
Contributions are welcome! Please fork the repository, create a feature branch, and submit a pull request. Make sure your code adheres to the project's coding standards and is well-tested.
This project is licensed under the MIT License. See the LICENSE file for details.
Special thanks to the Echo, GORM, and Fx communities for their excellent work and contributions.