https://github.com/rgomids/go-api-template-clean
Template de API em Go com Clean Architecture e princípios SOLID aplicados de forma rigorosa. Organizado em camadas desacopladas (domain, usecase, infra, handler), com injeção explícita de dependências, testes facilitados e prontos para CI/CD e Docker. Ideal para projetos escaláveis, modulares e com foco em legibilidade e manutenção a longo prazo.
https://github.com/rgomids/go-api-template-clean
api clean-architecture docker go makefile solid
Last synced: 5 months ago
JSON representation
Template de API em Go com Clean Architecture e princípios SOLID aplicados de forma rigorosa. Organizado em camadas desacopladas (domain, usecase, infra, handler), com injeção explícita de dependências, testes facilitados e prontos para CI/CD e Docker. Ideal para projetos escaláveis, modulares e com foco em legibilidade e manutenção a longo prazo.
- Host: GitHub
- URL: https://github.com/rgomids/go-api-template-clean
- Owner: rgomids
- Created: 2025-07-17T00:17:16.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2025-07-20T21:28:03.000Z (11 months ago)
- Last Synced: 2025-08-16T11:23:53.147Z (10 months ago)
- Topics: api, clean-architecture, docker, go, makefile, solid
- Language: Go
- Homepage:
- Size: 116 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# go-api-template-clean
Este repositório apresenta uma estrutura base para APIs em Go.
Consulte o diretório [`docs`](docs/README.md) para detalhes de arquitetura e instruções de uso.
## Requisitos
- Go 1.20 ou superior
- Make
- Ferramentas de lint como [staticcheck](https://staticcheck.io) (instalado via `make setup`)
## Conexões externas
O projeto já inclui integrações para:
- Banco de dados PostgreSQL
- Cache Redis
- Envio de emails via SMTP
## Configuração rápida
1. Execute o comando abaixo para preparar o ambiente de desenvolvimento:
```bash
make setup
```
Esse passo copia o `.env.example` para `.env` (caso ainda não exista), instala as dependências Go e a ferramenta `staticcheck`.
2. Ajuste as variáveis no arquivo `.env`:
- `APP_ENV` (dev|prod)
- `PORT` (padrão 8080)
- `DATABASE_URL` (obrigatória)
- `REDIS_URL`
- `SMTP_HOST`
- `SMTP_PORT` (padrão 587)
- `SMTP_USER`
- `SMTP_PASSWORD`
3. Execute a aplicação:
```bash
make run
```
## Testes e cobertura
Para executar os testes com relatório de cobertura, utilize:
```bash
make coverage
```
O comando gera os arquivos `coverage/coverage.out` e `coverage/coverage.html`.
## Rotas disponíveis
- `GET /health` retorna o status e a versão da API.
- `POST /users` cria um usuário.
- `DELETE /users/{id}` remove um usuário.
Importe a coleção `docs/postman_collection.json` e o ambiente `docs/postman_environment.json` no Postman para testar os endpoints rapidamente.
## Evoluindo a API
Siga os passos abaixo para adicionar novas funcionalidades. O exemplo a seguir mostra como criar uma rota para cadastro de produtos.
1. Crie a estrutura do produto em `internal/domain/entity/product.go`:
```go
package entity
type Product struct {
ID string
Name string
}
```
2. Defina `ProductRepository` em `internal/domain/repository` e a interface `ProductService` em `internal/domain/service`.
3. Implemente `ProductUseCase` em `internal/domain/usecase` seguindo as interfaces criadas.
4. Crie `ProductHandler` em `internal/handler/http` para expor os métodos via HTTP.
5. Registre as rotas em `internal/handler/http/routes/routes.go`:
```go
func RegisterRoutes(router *chi.Mux, userHandler *http.UserHandler, productHandler *http.ProductHandler) {
router.Route("/users", func(r chi.Router) {
r.Post("/", userHandler.Register)
r.Delete("/{id}", userHandler.Delete)
})
router.Route("/products", func(r chi.Router) {
r.Post("/", productHandler.Create)
r.Get("/{id}", productHandler.FindByID)
})
}
```
6. Atualize `BuildContainer` em `internal/app/container.go` para injetar o novo handler.
7. Execute `go test ./...` para garantir que tudo continua funcionando.
### Referências sobre Patterns
- [Wikipedia - Software design pattern](https://en.wikipedia.org/wiki/Software_design_pattern)
- [Refactoring Guru - Design Patterns in Go](https://refactoring.guru/design-patterns/go)