Este guia detalha como configurar o ambiente para desenvolvimento utilizando Go e Air, uma ferramenta de live reload para aplicações Go.
- Sistema operacional: Windows, macOS ou Linux
- Terminal ou prompt de comando com permissões administrativas
- Acesse a página oficial de downloads do Go: https://golang.org/dl/.
- Baixe o instalador correspondente ao seu sistema operacional.
- Siga as instruções do instalador para completar a instalação.
- Verifique se o Go foi instalado corretamente:
go version
- Instale o Air usando o comando
go install:go install github.com/cosmtrek/air@v1.42.0
- Verifique se o Air foi instalado corretamente:
O comando acima deve retornar a versão instalada do Air.
air -v
- Certifique-se de estar no diretório raiz do projeto.
- Navegue até a pasta
cmd/server(ou o diretório principal do servidor Go no projeto):cd cmd/server - Inicie o Air:
air
O servidor será iniciado com suporte a live reload. Qualquer alteração no código-fonte reiniciará o servidor automaticamente.
O recurso fornece uma implementação eficiente de paginação para aplicações utilizando Echo e GORM, permitindo consultas otimizadas com filtros, preload de relacionamentos e metadados.
No exemplo abaixo, utilizamos o padrão Repository para separar a lógica de acesso ao banco de dados.
package repositories
import (
"meuprojeto/models"
"meuprojeto/pagination"
"github.com/labstack/echo/v4"
"gorm.io/gorm"
)
// userRepository representa o repositório de usuários
type userRepository struct {
db *gorm.DB
}
// NewUserRepository cria uma nova instância de userRepository
func NewUserRepository(db *gorm.DB) *userRepository {
return &userRepository{db: db}
}
// Listagem retorna a lista paginada de usuários
func (r *userRepository) Listagem(c echo.Context) (*pagination.Pagination, error) {
var users []models.UsuarioView
// Chamada da função de paginação
paginations, err := pagination.Paginate(c, r.db, &users, nil, "UsuarioTipo")
if err != nil {
return nil, err
}
return paginations, nil
}No handler, chamamos o método Listagem do repositório para obter os dados paginados.
package handlers
import (
"net/http"
"meuprojeto/repositories"
"github.com/labstack/echo/v4"
)
type UserHandler struct {
userRepo *repositories.UserRepository
}
// NewUserHandler cria uma nova instância de UserHandler
func NewUserHandler(userRepo *repositories.UserRepository) *UserHandler {
return &UserHandler{userRepo: userRepo}
}
// ListUsers é o endpoint para listar usuários com paginação
func (h *UserHandler) ListUsers(c echo.Context) error {
// Chamada ao repositório
paginations, err := h.userRepo.Listagem(c)
if err != nil {
return c.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()})
}
// Retorna os dados paginados
return c.JSON(http.StatusOK, paginations)
}Dada a configuração acima, ao fazer uma requisição para o endpoint, o resultado será semelhante a:
Requisição:
GET /users?page=1&limit=10Resposta:
{
"total_records": 3,
"total_pages": 1,
"items": [
{
"id": 1,
"nome": "Marcos Lopes Gonçalves",
"cpf": "069.389.123-11",
"usuario_tipo_id": 1,
"tipo": {
"ID": 1,
"CreatedAt": "2024-11-18T12:46:49.003212Z",
"UpdatedAt": "2024-11-18T12:46:49.003212Z",
"DeletedAt": null,
"nome": "Comum"
}
}
]
}- Modularidade: Lógica de acesso ao banco isolada no repositório.
- Reutilização:
Paginatepode ser usado em diferentes repositórios. - Extensibilidade: Fácil inclusão de filtros e preload de relacionamentos conforme necessário.
Para iniciar a aplicação, siga os passos abaixo:
- Subir o MySQL
Abra um terminal e navegue até o diretório raiz do projeto. Primeiro, suba o contêiner MySQL:
docker-compose up --build mysql -dIsso iniciará o serviço MySQL. O contêiner estará acessível na porta 3306.
- Subir os demais serviços
Depois que o MySQL estiver rodando, suba o restante dos serviços da aplicação (Go + Air):
docker-compose up -d O servidor Go estará acessível na porta 8080.
- Verificar se tudo está funcionando
Verifique os logs dos contêineres para garantir que tudo está rodando corretamente:
docker-compose logs -fApós iniciar os serviços, você pode acessar a aplicação através do seguinte URL no seu navegador:
- Acesse a API: http://localhost:8080
- Acesse o PHPMyAdmin: http://localhost:8081
Para parar a aplicação e desligar os contêineres Docker, siga os passos abaixo:
- Abra um terminal e navegue até o diretório raiz do projeto.
- Execute o seguinte comando para parar e remover os contêineres, redes e volumes criados:
docker-compose downAgora sua aplicação está configurada para rodar com Docker, incluindo o MySQL, o servidor Go com suporte a live reload utilizando o Air e o PHPMyAdmin.