Publiquei um mini tutorial guiado de arquitetura hexagonal em Go. Para mostrar como as fronteiras aparecem no código, montei uma pequena API de transferência e organizei a explicação em nove etapas.
Uma chamada a POST /transfers chega ao handler HTTP como JSON. O handler converte a entrada em uma chamada para o serviço da aplicação. O serviço busca as contas usando a porta AccountRepository. No domínio, Withdraw recusa valores menores ou iguais a zero e saldos insuficientes. Em seguida, Deposit soma o valor à conta de destino. O serviço pede ao repositório que grave as duas contas.
HTTP → handler → serviço de aplicação → domínio ↓ porta AccountRepository ↓ adaptador em memória O papel da porta e do adaptador
A aplicação conhece o contrato AccountRepository, que define Get e Save. O repositório em memória implementa esses métodos. Em Go, essa implementação é implícita: o tipo que possui os métodos com as assinaturas exigidas satisfaz a interface, sem declarar explicitamente que a implementa.
Essa direção ajuda a manter as regras do domínio independentes do protocolo HTTP e do armazenamento concreto. O handler traduz entrada e erros HTTP; o serviço coordena o caso de uso; o bootstrap escolhe as implementações e monta a aplicação. O router recebe handlers que registram as próprias rotas, enquanto /health é compartilhado pelo servidor.
O que o exemplo cobre
O projeto expõe GET /health e POST /transfers, com duas contas de demonstração. O adaptador protege o map com sync.RWMutex; Save valida as duas contas antes de atualizar o armazenamento. Essa proteção cobre o acesso ao map, mas a sequência completa de leitura, alteração e gravação não é uma transação. Os dados ficam em memória e desaparecem quando o processo termina. O exemplo também não tem banco de dados, autenticação ou regras de moeda.
A página do mini tutorial percorre as nove etapas, da introdução à arquitetura e ao mapa do projeto até a composição e inicialização da aplicação. Se quiser seguir cada parte, acesse:
https://bendevoficial.com/learning/aprendendo-hexagonal-em-go
O código está disponível em https://github.com/bendevjunior/hexagonal-architecture-go.
Se você acompanhar o exemplo, me conta se a separação entre aplicação, domínio e adaptadores ficou clara. Pode deixar dúvidas ou sugestões nos comentários. Quero conversar sobre arquitetura hexagonal e outros temas técnicos para os próximos conteúdos.
