Categoria

Golang

Circuit breaker com gobreaker ou hystrix-go
Golang

Circuit breaker com gobreaker ou hystrix-go

Em sistemas distribuídos, falhas são inevitáveis. Quando um serviço downstream começa a falhar, o comportamento padrão de simplesmente repetir a chamada pode levar a um efeito cascata devastador, consumindo recursos preciosos e derrubando serviços upstream. O padrão Circuit Breaker surge como uma solução elegante para esse problema.

05/05/2026
Clean architecture em Go: organizando por camadas
Golang 05/05/2026

Clean architecture em Go: organizando por camadas

A Clean Architecture, proposta por Robert C. Martin, encontra em Go um terreno fértil para sua implementação. A simplicidade da linguagem, seu sistema de pacotes bem definido e as interfaces implícitas criam um ambiente natural para aplicar os princípios de separação por camadas.

Closures em Go
Golang 05/05/2026

Closures em Go

Em Go, uma closure é uma função que captura e mantém referências a variáveis do escopo externo onde foi definida. Isso significa que a closure "lembra" do ambiente onde foi criada, mesmo após esse escopo externo ter terminado sua execução.

Banco de dados com database/sql
Golang 05/05/2026

Banco de dados com database/sql

O pacote database/sql é a abstração oficial da linguagem Go para interagir com bancos de dados relacionais. Ele fornece uma interface genérica que permite trabalhar com diferentes SGBDs (PostgreSQL, MySQL, SQLite, etc.) sem alterar a lógica da aplicação — apenas trocando o driver importado.

Benchmarks em Go
Golang 05/05/2026

Benchmarks em Go

Benchmarks são ferramentas essenciais para medir o desempenho de código em Go. Enquanto testes unitários verificam a correção funcional, benchmarks medem tempo de execução, alocações de memória e eficiência computacional. Em Go, os benchmarks são integrados ao pacote testing e seguem uma estrutura padronizada.

Build otimizado: reduzindo tamanho do binário
Golang 05/05/2026

Build otimizado: reduzindo tamanho do binário

Em projetos Go, o binário gerado pelo compilador padrão costuma ser relativamente grande — frequentemente entre 5 MB e 20 MB para aplicações simples, podendo chegar a dezenas de megabytes em projetos com muitas dependências. Esse tamanho impacta diretamente:

Build tags e compilação condicional
Golang 05/05/2026

Build tags e compilação condicional

Build tags são diretivas de compilação que permitem incluir ou excluir arquivos do processo de build do Go com base em condições específicas. Elas são essenciais para lidar com código dependente de plataforma, funcionalidades experimentais, ou configurações de ambiente.

Caching com singleflight e bigcache
Golang 05/05/2026

Caching com singleflight e bigcache

Sistemas concorrentes em Go enfrentam desafios clássicos de desempenho: latência elevada em consultas a bancos de dados, sobrecarga em APIs externas e contenção de recursos. O cache em memória surge como solução imediata, mas traz consigo o problema do cache stampede — quando múltiplas goroutines tentam reconstruir o mesmo dado simultaneamente.

Arrays: tamanho fixo e alocação na stack
Golang 05/05/2026

Arrays: tamanho fixo e alocação na stack

Em Go, arrays são tipos de valor (value types) com tamanho fixo determinado em tempo de compilação. Diferentemente de slices, que são dinâmicos, arrays possuem uma quantidade imutável de elementos do mesmo tipo.

Atomic operations com sync/atomic
Golang 05/05/2026

Atomic operations com sync/atomic

Operações atômicas são instruções de máquina que executam uma operação de leitura-modificação-escrita de forma indivisível. Em um ambiente concorrente, múltiplas goroutines podem acessar a mesma variável simultaneamente, resultando em race conditions. As operações atômicas garantem que nenhuma outra goroutine observe a operação pela metade.