Onde o Go é a ferramenta certa
O Go foi feito para serviços de backend: compila para um único binário estático, lida com milhares de ligações concorrentes sem cerimónia e mantém-se legível à medida que uma equipa cresce. Usamo-lo onde o débito, a simplicidade e a iteração rápida importam todos.
- APIs REST e gRPC
- Microsserviços e service meshes
- Planos de controlo e serviços de orquestração
- Serviços de rede e workers de alta concorrência
- CLIs e ferramentas internas que são distribuídas como um único binário
- Integrações e pipelines de dados
Como construímos em Go
Uma arquitetura limpa e em camadas, com tratamento explícito de erros e concorrência usada deliberadamente. Go idiomático que o próximo engenheiro consegue ler.
- 1
Design
Modelamos o domínio e as fronteiras dos serviços, e acordamos o contrato da API antes de construir.
- 2
Construção idiomática
Arquitetura em camadas com fronteiras claras, tratamento explícito de erros e logging estruturado.
- 3
Concorrência onde conta
Goroutines e canais usados com critério, com o race detector ligado e a contenção medida, não presumida.
- 4
Testar e fazer benchmarks
Testes table-driven, cobertura de integração contra uma base de dados real e benchmarks para os percursos críticos.
- 5
Lançar e operar
Um único binário estático, em contentor, com health checks e métricas para que seja fácil de operar.
O que recebe
Um serviço em Go rápido e idiomático que a sua equipa consegue operar e estender.
- Uma base de código em Go idiomática com uma arquitetura limpa e em camadas
- Um contrato de API documentado (REST ou gRPC)
- Testes table-driven e cobertura de integração
- Benchmarks para os percursos críticos em desempenho
- Uma build em contentor com health checks e métricas
- Documentação e uma transição para os seus engenheiros
A toolchain de Go
Primeiro a biblioteca padrão, e um pequeno conjunto de dependências bem mantidas que a sua equipa consegue assumir após a passagem.
Perguntas sobre desenvolvimento em Go
Quando devo escolher Go em vez de Node.js ou Python?
O Go é uma forte opção para serviços de backend que precisam de lidar com muito trabalho concorrente, compilar para um único binário implementável e manter-se rápidos e simples à medida que a equipa cresce. O Node.js vence quando quer uma única linguagem no front-end e no back-end; o Python vence para trabalho de dados e ML. Recomendamos o que se adequa à sua equipa e à sua carga de trabalho, e não apenas o que mais gostamos.
O Go é bom para microsserviços?
Muito. Binários estáticos pequenos, arranque rápido, concorrência de primeira classe e um bom suporte de gRPC e HTTP fazem do Go uma escolha natural para microsserviços. Dito isto, os microsserviços acrescentam complexidade operacional, e ajudamo-lo a decidir se precisa mesmo deles ou se um único serviço bem estruturado é mais simples.
Conseguem trabalhar na nossa base de código em Go existente?
Sim. Analisamos a estrutura atual, os testes e os pontos problemáticos, e depois estendemo-la ou refatoramo-la de forma idiomática. Seguimos as convenções que a sua equipa já usa em vez de impor as nossas.
Como lidam com a concorrência em segurança?
Deliberadamente. Usamos goroutines e canais onde ajudam, corremos o race detector no CI e medimos a contenção em vez de adivinhar. Os bugs de concorrência são notoriamente subtis, por isso apoiamo-nos nas ferramentas e na revisão para os manter de fora.