Um playground completo que demonstra todas as funcionalidades do Echo framework - um framework Go de alta performance, extensível e minimalista, seguindo as melhores práticas de layout de projetos Go.
- Router otimizado sem alocação dinâmica de memória
- Priorização inteligente de rotas
- Processamento eficiente de requisições HTTP
- Organização de endpoints em grupos lógicos
- APIs RESTful robustas e escaláveis
- Gerenciamento simplificado de APIs complexas
- Configuração preparada para TLS automático
- Integração com Let's Encrypt
- Comunicação segura simplificada
- Suporte nativo ao protocolo HTTP/2
- Melhoria na velocidade e responsividade
- Otimização na transmissão de dados
- Middleware global (Logger, Recover, CORS)
- Middleware customizado para logging
- Middleware de autenticação JWT
- Aplicação flexível em diferentes níveis
- Binding automático de JSON, XML e form-data
- Extração simplificada de dados de requisições
- Integração perfeita com lógica de aplicação
- Respostas em múltiplos formatos (JSON, XML, HTML)
- Upload e download de arquivos
- Streaming de dados em tempo real
- Templates HTML dinâmicos
- Renderização com qualquer engine de template
- Templates HTML dinâmicos
- Design responsivo e moderno
- Tratamento de erros centralizado
- API facilmente extensível
- Middleware customizado
- Integração com funcionalidades de terceiros
- Estrutura seguindo padrões da comunidade Go
- Separação clara de responsabilidades
- Código reutilizável e testável
- Organização profissional
- Go 1.21 ou superior
- Git
# Clonar o repositório
git clone https://github.com/nataliagranato/echo.git
cd echo
# Instalar dependências
go mod tidy
# Executar o servidor
go run cmd/echo-playground/main.go
O servidor estará disponível em: http://localhost:8080
# Compilar a aplicação
./scripts/build.sh
# Executar o binário
./bin/echo-playground
GET /api/v1/
- Informações sobre o framework
GET /api/v1/hello/:name
- Saudação personalizadaGET /api/v1/html
- Página HTML renderizadaGET /api/v1/xml
- Resposta em XMLGET /api/v1/stream
- Streaming de dados
POST /api/v1/users
- Criar usuário com binding automáticoGET /api/v1/search
- Query parameters
POST /api/v1/upload
- Upload de arquivosGET /api/v1/download/:filename
- Download de arquivos
GET /api/v1/protected/profile
- Endpoint protegido (requer JWT)
GET /api/v1/products
- Listar produtosGET /api/v1/products/:id
- Obter produtoPOST /api/v1/products
- Criar produtoPUT /api/v1/products/:id
- Atualizar produtoDELETE /api/v1/products/:id
- Deletar produto
echo-playground/
├── cmd/ # Aplicações principais
│ └── echo-playground/ # Aplicação principal
│ └── main.go # Ponto de entrada
├── internal/ # Código privado da aplicação
│ ├── app/ # Lógica da aplicação
│ │ ├── handlers.go # Handlers HTTP
│ │ ├── products.go # Handlers de produtos
│ │ ├── template.go # Renderizador de templates
│ │ └── error_handler.go # Tratamento de erros
│ └── pkg/ # Pacotes internos compartilhados
├── pkg/ # Código público reutilizável
│ ├── api/ # Respostas da API
│ ├── middleware/ # Middlewares customizados
│ ├── models/ # Modelos de dados
│ └── utils/ # Utilitários
├── web/ # Componentes web
│ └── templates/ # Templates HTML
├── configs/ # Arquivos de configuração
├── scripts/ # Scripts de build e deploy
├── build/ # Configurações de build
│ └── ci/ # CI/CD
├── docs/ # Documentação
├── test/ # Testes e dados de teste
├── examples/ # Exemplos de uso
├── assets/ # Recursos estáticos
└── go.mod # Dependências do Go
# Informações gerais
curl http://localhost:8080/api/v1/
# Criar usuário
curl -X POST -H "Content-Type: application/json" \
-d '{"name":"João","email":"[email protected]","age":30}' \
http://localhost:8080/api/v1/users
# Listar produtos
curl http://localhost:8080/api/v1/products
# Endpoint protegido
curl -H "Authorization: Bearer valid-token" \
http://localhost:8080/api/v1/protected/profile
# Upload de arquivo
curl -X POST -F "file=@test/teste.txt" \
http://localhost:8080/api/v1/upload
# Executar todos os testes
./scripts/test_api.sh
Para documentação detalhada de todos os endpoints e funcionalidades, consulte:
As configurações do servidor estão em configs/config.yaml
:
server:
port: 8080
host: "0.0.0.0"
read_timeout: 30s
write_timeout: 30s
idle_timeout: 120s
Para habilitar TLS automático com Let's Encrypt, modifique o arquivo cmd/echo-playground/main.go
:
autoTLS := autocert.Manager{
Prompt: autocert.AcceptTOS,
HostPolicy: autocert.HostWhitelist("seu-dominio.com"),
Cache: autocert.DirCache("/var/www/.cache"),
}
e.AutoTLSManager = &autoTLS
Para habilitar HTTP/2, descomente as linhas de configuração TLS no cmd/echo-playground/main.go
.
Para expandir este playground, você pode:
- Implementar banco de dados real (PostgreSQL, MongoDB)
- Adicionar validações avançadas com
go-playground/validator
- Implementar WebSocket real para comunicação em tempo real
- Configurar rate limiting e outras medidas de segurança
- Adicionar testes unitários e de integração
- Implementar documentação Swagger/OpenAPI
- Adicionar monitoramento e métricas
- Configurar CI/CD com GitHub Actions ou GitLab CI
Contribuições são bem-vindas! Sinta-se à vontade para:
- Reportar bugs
- Sugerir novas funcionalidades
- Melhorar a documentação
- Adicionar exemplos de uso
Este projeto é um playground educacional para demonstrar as funcionalidades do Echo framework.