Goravel: por que um dev PHP (eu) resolveu abraçar Go sem sentir saudades do Laravel
Migrar de stack assusta. Eu vinha de anos entre PHP/Laravel e Node.js, feliz com o ecossistema, o DX e a produtividade. Ao encarar Go para serviços de alto desempenho, trombei com o Goravel — um framework Go com cara de Laravel — e a curva de adoção virou rampa. Este texto é um relato honesto: o que me fez ficar, o que doeu, o que brilhou e por que hoje Go entrou de vez na minha stack.
O que é o Goravel (e por que isso importa)
O Goravel é um framework web em Go com módulos completos: ORM, HTTP, filas, agendador, logging, cache e mais, com proposta de DX familiar para quem vem do Laravel. A página do projeto deixa isso escancarado (“PHPers’ first choice”) e lista os blocos essenciais que já vêm prontos.
Coisas que ajudaram muito no “choque cultural”:
- Artisan no mundo Go: existe um CLI chamado Artisan para listar e rodar comandos, muito próximo ao fluxo do Laravel.
- Router com cara de casa: o módulo HTTP usa Gin por padrão (com Fiber como alternativa), oferece rotas REST, grupos, rate limiting, middlewares, HTTPS e utilitários bem familiares.
- ORM pragmático: modelagem, soft deletes, scopes, relations e um query builder com APIs próximas do que já estamos acostumados; tags indicam integração com conceitos do GORM.
- Autenticação: suporte a JWT (e Session) via
facades.Auth(), com geração de segredo e múltiplos guards. - Cache: driver em memória e Redis via pacote oficial, com remember/rememberForever, locks e suporte a drivers customizados.
- Filas & Scheduler: jobs assíncronos e um agendador que segue a filosofia “um cron chama tudo”, como no Laravel.
- Boas de instalação:
key:generate,jwt:secret, live reload com Air e convenções deconfig/e.envque lembram o ecossistema PHP.
O detalhe que me vendeu: facades para tudo (Route, Cache, Queue, Orm, Log, etc.), reproduzindo o padrão mental que uso no Laravel — só que em Go.
Por que eu adicionei Go à minha stack (sem largar PHP/Node)
- Desempenho e concorrência: goroutines e channels dão um salto em throughput para serviços de consulta, scraping, orquestração e pipelines de dados.
- Implantação simples: binário estático, imagens enxutas, startup rápido.
- Tipos + erro explícito: o design do Go me forçou a limpar interfaces e lidar com falhas desde o começo (o que reduziu “surpresas” em produção).
- DX com sotaque conhecido: com Goravel, trouxe meu muscle memory de Laravel para o mundo Go e consegui produzir com menos atrito no dia 1.
Onde o Goravel brilhou nos meus projetos
- APIs que precisavam escalar: o combo Gin driver + Queue para tarefas pesadas zerou timeouts e deixou o request cycle leve.
- Jobs agendados: scheduler fluente, um
cronno servidor e o resto dentro do app — do jeito que eu já fazia no Laravel. - Autenticação JWT: guards separados, refresh, parse no middleware — sem gambiarras.
- Cache: remember para esconder latências de integrações externas e locks atômicos para não processar duplicado.
As dificuldades reais (sem romantizar)
- Ecossistema menor que o do Laravel: há menos packages “prontos” e receitas de produção. Várias coisas fiz com bibliotecas Go puras ou extensão própria.
- ORM ≠ Eloquent: a API é familiar, mas não espere todos os traits e macros do Eloquent; algumas consultas exigiram pensar “à la Go”.
- Erros e contexto: o padrão Go de
if err != nilem camadas profundas pede disciplina. Vale investir em helpers e wraps para manter logs úteis. - Conceitos de concorrência: goroutine leaks, context cancellation e timeouts precisam de rotina e linting — é poder e responsabilidade.
- Migração mental: trocar facades estáticas por injeção “estilo Go” em alguns pontos e entender providers/bootstrapping do Goravel levou um ou dois sprints.
O que facilitou a transição
- Estrutura e comandos parecidos (
artisan,routes/,config/,app/…), então scaffold e nomenclaturas não estranham. - Drivers HTTP plugáveis (Gin/Fiber), úteis para perfis distintos ou preferências da equipe.
- Autenticação pronta (JWT/Session) e cache Redis sem dor.
- Scheduler e Queue com sintaxe “Laravel-like”, reduzindo context-switch mental.
Quando eu usaria Goravel (e quando não)
Usaria quando:
- preciso do desempenho/concurrency do Go, mas quero DX de framework completo para acelerar time-to-market;
- a equipe tem background de Laravel e quer produtividade desde o primeiro dia;
- o projeto pede filas, agendador, auth e cache integrados sem garimpar 10 libs diferentes.
Pensaria duas vezes quando:
- o projeto depende de pacotes muito específicos do ecossistema Laravel (onde a equivalência direta ainda não existe);
- a equipe já domina um microframework Go enxuto (Echo/Gin/Fiber puros) e quer controlar tudo peça a peça.
Dicas rápidas para quem vem de Laravel
- Comece pelo CLI:
go run . artisan list,key:generate,jwt:secret. Isso já “quebra o gelo”. - Rotas e rate limiting: defina groups e limites cedo; ajuda muito em APIs públicas.
- Jobs + Scheduler: tire trabalho pesado do request (filas) e formalize rotinas (scheduler).
- Cache com locks: use
Remember/Lockem integrações lentas para evitar thundering herd. - Padrões de erro: padronize respostas/erros no começo; invista em middlewares e wrappers de contexto.
Conclusão
Para mim, o Goravel foi a ponte ideal: mantenho a produtividade e a organização mental do Laravel, ganho o desempenho e a implantação do Go, e o time inteiro sobe junto. Não troquei PHP nem Node.js; somei Go onde ele brilha — e o Goravel reduziu drasticamente o atrito dessa decisão.
Se você é PHPer curioso com Go, vale muito o test-drive. A sensação é de “já joguei este jogo”, só que agora com goroutines.