Teste uma API REST em Go com httptest, um store fake, verificações de log, o race detector e fuzzing. Depois coloque em produção com timeouts no servidor, graceful shutdown e um único binário estático.
Uma API REST de lista de tarefas em Go sem pacotes de terceiros. Construa o store, as rotas, a decodificação segura de JSON, a validação, os status codes, o middleware e os logs com slog, uma camada por vez.
A biblioteca padrão do Go traz um servidor HTTP pronto para produção. Aprenda handlers, roteamento com padrões de método e caminho no ServeMux, as regras do ResponseWriter, o que acontece com cada requisição e por que o http.Server precisa de timeouts.
Um context em Go avisa cada goroutine de um trabalho quando parar. Aprenda cancelamento, timeouts e valores de requisição, e depois monte um worker pool, um pipeline, fan-out, um errgroup e um semáforo que nunca vazam.
Duas goroutines que mudam a mesma variável sem coordenação causam um data race e perdem atualizações em silêncio. Veja como sync.Mutex, RWMutex, atomic e Once evitam isso, e como go run -race encontra o problema.
Um channel em Go passa valores entre goroutines e faz uma esperar pela outra. Aprenda channels com e sem buffer, fechamento, deadlocks, channels nil e como o select espera em vários ao mesmo tempo.
Uma goroutine é uma função que roda junto com o resto do seu programa, e o Go consegue rodar milhares delas ao mesmo tempo. Veja como iniciá-las, esperar por elas, evitar vazamentos e como o scheduler divide poucas threads entre elas.
Go decide por você se um valor vive na stack ou no heap. Veja como a escape analysis toma essa decisão, como observá-la com go build -gcflags=-m, como contar alocações e o que o garbage collector faz depois.
Generics em Go deixam uma função servir para muitos tipos, com constraints dizendo quais tipos são permitidos. Iteradores deixam uma função entregar valores um de cada vez a um loop for, e parar no instante em que o loop dá break.
Um módulo Go é uma árvore de pacotes sob um único go.mod. Veja como funcionam import paths, nomes exportados e pastas internal, e depois teste o código com testes table-driven, subtests, examples e benchmarks.