ROTA · 62 CLASSES · 8 GRUPOS
Imersão Go
Construa uma base completa de Go, da sintaxe aos projetos e à concorrência.
Pré-requisitos orientam, mas nunca bloqueiam. Cinco classes da árvore são grátis com conta.O ARCO DA ROTA
ORDEM RECOMENDADA
62 classes, do primeiro passo ao fechamento.
Cada classe leva cerca de 15–25 minutos no novo formato de slides. Você pode sair da ordem quando outro nó fizer mais sentido.
- 01Primeiros passosBem-vindo ao Go: por que a linguagem existe e seu primeiro programa rodando
O que é Go, por que a infraestrutura da internet é escrita nele e como este curso funciona — com seu primeiro programa compilando e rodando no navegador.
- 02Primeiros passosHello, World e a toolchain: go run, go build e go mod sem mistério
O ciclo go run, go build e go mod explicado de ponta a ponta: o que cada comando faz, quando usar cada um e por que o binário de Go não precisa de runtime.
- 03Primeiros passosValores e tipos: o que a tipagem estática garante (e o que ela recusa)
Os tipos básicos de Go — int, float64, string e bool — e a regra que muda seu jeito de programar: nada se converte sozinho.
- 04Primeiros passosVariáveis: var, := e o fim do undefined
As duas formas de declarar variáveis em Go, quando usar cada uma e a garantia dos zero values: toda variável nasce com um valor útil, nunca indefinida.
- 05Primeiros passosConstantes e iota: valores que o compilador garante que nunca mudam
const, as constantes não tipadas que flexibilizam a regra dos tipos de forma segura, e o iota que gera enumerações sem números mágicos.
- 06Controle de fluxofor: o único loop de Go e todas as suas formas
As quatro formas do for — completo, estilo while, infinito e range — mais break, continue e a execução passo a passo de um loop de verdade.
- 07Controle de fluxoif e else: decisões com escopo curto e o padrão que define Go
O if de Go sem parênteses e sem truthy, o init statement que limita escopo, early returns no lugar de else — e o primeiro contato com if err != nil.
- 08Controle de fluxoswitch: comparações múltiplas sem a armadilha do fallthrough
O switch de Go que não vaza entre cases, a forma sem expressão que substitui cadeias de if, múltiplos valores por case e a prévia do type switch.
- 09Controle de fluxodefer: a limpeza garantida que roda na ordem inversa
Como defer agenda chamadas para o fim da função, por que a ordem é LIFO, quando os argumentos são avaliados e o padrão abrir-defer-fechar que percorre todo código Go.
- 10Tipos CompostosArrays: o tamanho faz parte do tipo e a cópia é total
Arrays em Go têm tamanho fixo gravado no tipo e semântica de valor: atribuir ou passar um array copia todas as posições. Entenda quando isso ajuda e por que os slices existem.
- 11Tipos CompostosSlices: a janela flexível que substitui o array no dia a dia
Slices são a coleção padrão de Go: crescem com append, fatiam com s[a:b] e compartilham o array por baixo. Aprenda a criar, estender e fatiar sem surpresas.
- 12Tipos CompostosSlices por dentro: len, cap e o array subjacente
Entenda o header de um slice, a diferença entre len e cap e quando append preserva ou troca o array subjacente.
- 13Tipos CompostosMaps: busca direta por chave, comma-ok e a ordem que não existe
Maps associam chaves a valores com busca média O(1): criação com make, leitura com comma-ok, delete, range sem ordem garantida e o zero value que dispensa inicialização.
- 14Tipos CompostosStructs: campos nomeados, cópia por valor e o modelo do seu domínio
Structs agrupam campos nomeados em um tipo seu: literal com nomes, acesso com ponto, zero value útil, comparação com == e a mesma semântica de cópia total dos arrays.
- 15Tipos CompostosPonteiros: o endereço que permite alterar à distância — sem aritmética
Ponteiros em Go: & captura o endereço de uma variável, * lê e escreve a célula apontada. Quando usar, o que o nil significa e por que não existe aritmética de ponteiros.
- 16Tipos CompostosStrings e runas: bytes por baixo, letras por cima
Strings em Go são bytes imutáveis em UTF-8: len conta bytes, indexar devolve byte, range decodifica runas. Aprenda a contar, inverter e truncar texto sem corromper acentos.
- 17Tipos CompostosEnums com iota: estados nomeados que o compilador confere
Transforme int solto em estado nomeado: tipos definidos com constantes iota, zero value com significado, parse com comma-ok e flags de bits — o enum idiomático de Go.
- 18FunçõesFunções: a assinatura é o contrato — e funções são valores
Funções em Go: assinaturas tipadas sem overload nem argumentos padrão, funções anônimas e funções como valores — passadas como parâmetro, guardadas em slices e maps.
- 19FunçõesMúltiplos retornos: valor e veredito na mesma assinatura
Funções Go devolvem mais de um valor: quociente e resto, valor e ok, resultado e erro. Aprenda a receber, descartar com _, nomear retornos e desenhar contratos sem valores mágicos.
- 20FunçõesVariádicas: a assinatura que aceita quantos argumentos vierem
Funções variádicas em Go: values ...int empacota argumentos em um slice, reticências espalham um slice existente, e o design de assinaturas como Max(first, rest...) elimina casos inválidos.
- 21FunçõesClosures: funções que carregam o ambiente onde nasceram
Closures em Go: funções anônimas que capturam variáveis do escopo — por referência, não por cópia. Contadores, acumuladores, memoização e a captura em loops do Go moderno.
- 22FunçõesRecursão: o problema que se resolve com uma versão menor de si
Recursão em Go: caso base, passo recursivo e a pilha de chamadas frame a frame. Fatorial, soma de dígitos, árvores de diretórios — e quando preferir um loop.
- 23FunçõesRange over iterators: o for range que percorre o que você definir
Iteradores de função do Go 1.23+: func(yield) percorrível com for range, sequências preguiçosas e infinitas, iter.Seq, break que propaga e combinadores como Take.
- 24Métodos, interfaces e genericsMétodos: comportamento ligado ao tipo certo
Domine métodos: comportamento ligado ao tipo certo com programas completos e exercícios testados.
- 25Métodos, interfaces e genericsInterfaces: contratos satisfeitos sem declaração
Domine interfaces: contratos satisfeitos sem declaração com programas completos e exercícios testados.
- 26Métodos, interfaces e genericsInterfaces na prática: Reader, Writer e Stringer
Domine interfaces na prática: reader, writer e stringer com programas completos e exercícios testados.
- 27Métodos, interfaces e genericsStruct embedding: composição com promoção deliberada
Domine struct embedding: composição com promoção deliberada com programas completos e exercícios testados.
- 28Métodos, interfaces e genericsGenerics: algoritmos tipados com constraints
Domine generics: algoritmos tipados com constraints com programas completos e exercícios testados.
- 29Métodos, interfaces e genericsGenerics na prática: reutilize só onde compensa
Domine generics na prática: reutilize só onde compensa com programas completos e exercícios testados.
- 30ErrosErrors: falhas são valores, não exceções
Domine errors: falhas são valores, não exceções com programas completos e exercícios testados.
- 31ErrosErros customizados: dados para decisões melhores
Domine erros customizados: dados para decisões melhores com programas completos e exercícios testados.
- 32ErrosWrapping de erros: contexto sem perder a causa
Domine wrapping de erros: contexto sem perder a causa com programas completos e exercícios testados.
- 33ErrosPanic, defer e recover: contenha o inesperado
Domine panic, defer e recover: contenha o inesperado com programas completos e exercícios testados.
- 34ErrosEstratégia de erros: contexto, decisão e tratamento único
Domine estratégia de erros: contexto, decisão e tratamento único com programas completos e exercícios testados.
- 35Concorrência IGoroutines: trabalho concorrente com ciclo de vida claro
Aprenda goroutines: trabalho concorrente com ciclo de vida claro com visualização passo a passo, código executável e exercícios determinísticos.
- 36Concorrência IChannels: comunicação e sincronização entre goroutines
Aprenda channels: comunicação e sincronização entre goroutines com visualização passo a passo, código executável e exercícios determinísticos.
- 37Concorrência IChannels com buffer: capacidade, bloqueio e pressão
Aprenda channels com buffer: capacidade, bloqueio e pressão com visualização passo a passo, código executável e exercícios determinísticos.
- 38Concorrência ISincronização com channels: conclusão e happens-before
Aprenda sincronização com channels: conclusão e happens-before com visualização passo a passo, código executável e exercícios determinísticos.
- 39Concorrência IDireções de channel: contratos de produtor e consumidor
Aprenda direções de channel: contratos de produtor e consumidor com visualização passo a passo, código executável e exercícios determinísticos.
- 40Concorrência Iselect: coordenando múltiplas comunicações prontas
Aprenda select: coordenando múltiplas comunicações prontas com visualização passo a passo, código executável e exercícios determinísticos.
- 41Concorrência ITimeouts e cancelamento sem vazar goroutines
Aprenda timeouts e cancelamento sem vazar goroutines com visualização passo a passo, código executável e exercícios determinísticos.
- 42Concorrência IOperações não bloqueantes com select e default
Aprenda operações não bloqueantes com select e default com visualização passo a passo, código executável e exercícios determinísticos.
- 43Concorrência IFechando channels: propriedade, comma-ok e fim do fluxo
Aprenda fechando channels: propriedade, comma-ok e fim do fluxo com visualização passo a passo, código executável e exercícios determinísticos.
- 44Concorrência Irange sobre channels: drenar até o fechamento
Aprenda range sobre channels: drenar até o fechamento com visualização passo a passo, código executável e exercícios determinísticos.
- 45Concorrência IIWaitGroup: esperar um conjunto dinâmico de goroutines
Aprenda waitgroup: esperar um conjunto dinâmico de goroutines com visualização passo a passo, código executável e exercícios determinísticos.
- 46Concorrência IIWorker pools: concorrência limitada e shutdown completo
Aprenda worker pools: concorrência limitada e shutdown completo com visualização passo a passo, código executável e exercícios determinísticos.
- 47Concorrência IIRate limiting: tokens, rajadas e testes determinísticos
Aprenda rate limiting: tokens, rajadas e testes determinísticos com visualização passo a passo, código executável e exercícios determinísticos.
- 48Concorrência IIOperações atômicas: contadores sem data race
Aprenda operações atômicas: contadores sem data race com visualização passo a passo, código executável e exercícios determinísticos.
- 49Concorrência IIMutexes: protegendo invariantes compartilhadas
Aprenda mutexes: protegendo invariantes compartilhadas com visualização passo a passo, código executável e exercícios determinísticos.
- 50Concorrência IIEstado por goroutine: um único dono e mensagens
Aprenda estado por goroutine: um único dono e mensagens com visualização passo a passo, código executável e exercícios determinísticos.
- 51Concorrência IIContext: cancelamento propagado e limites de trabalho
Aprenda context: cancelamento propagado e limites de trabalho com visualização passo a passo, código executável e exercícios determinísticos.
- 52Stdlib essencialstrings e strconv: a oficina de texto da stdlib
Domine as funções de strings e strconv que todo programa Go usa: Split, TrimSpace, Cut, Builder e as conversões seguras entre texto e número.
- 53Stdlib essencialfmt e formatação: verbos, largura e o contrato do Stringer
Aprenda os verbos do fmt de %v a %q, controle largura e precisão, formate dinheiro sem float e implemente fmt.Stringer nos seus tipos.
- 54Stdlib essencialJSON em Go: struct tags, Marshal e as fronteiras do seu programa
Serialize e desserialize JSON com encoding/json: struct tags, omitempty, campos ausentes versus zero, e agregação de dados que chegam de fora.
- 55Stdlib essencialtime: instantes, durações e o layout de referência
Trabalhe com datas e horas em Go: o layout de referência 2006-01-02, aritmética com Duration, fusos horários e as armadilhas de AddDate.
- 56Stdlib essencialregexp: padrões de texto com garantia de tempo linear
Use regexp em Go: MustCompile, grupos de captura com FindStringSubmatch, substituições com ReplaceAll e a garantia RE2 de tempo linear.
- 57Stdlib essencialsort e o pacote slices: ordenar, buscar e manter ordenado
Ordene com slices.Sort e SortFunc, entenda estabilidade e comparadores, busque com BinarySearch e mantenha coleções ordenadas com Insert.
- 58Do código ao projetogo.mod e dependências: builds reproduzíveis com Minimal Version Selection
Entenda módulos Go: a anatomia do go.mod, o papel do go.sum, semver e como o algoritmo Minimal Version Selection escolhe cada versão do build.
- 59Do código ao projetotesting: tabelas de casos e o go test
Escreva testes em Go com tabelas de casos: go test, t.Run, t.Errorf, a convenção got/want e testes como especificação executável.
- 60Do código ao projetohttp client: requisições, respostas e os três pecados capitais
Use o client HTTP da stdlib: monte requisições com headers e query strings, trate status e corpo com defer Close, e teste tudo com transporte falso.
- 61Do código ao projetohttp server: handlers, ServeMux moderno e testes sem rede
Construa servidores HTTP com o ServeMux do Go 1.22: method patterns, wildcards com PathValue, respostas JSON e handlers testados com httptest.
- 62Do código ao projetoProjeto final: uma CLI de tarefas juntando toda a trilha
O capstone da trilha: construa uma CLI de gestão de tarefas em quatro etapas — parser de argumentos, storage em memória, filtros e formatação de saída.
PRÉVIA DA PRIMEIRA CLASSE
Bem-vindo ao Go: por que a linguagem existe e seu primeiro programa rodando
Imagine uma cozinha de restaurante no horário de pico. Não é a cozinha da sua casa: são vinte cozinheiros, centenas de pedidos por hora e gente nova entrando na equipe toda semana. Nesse ambiente, uma receita de doze etapas com utensílios exóticos não é sofisticação — é gargalo. O que funciona é receita curta, ferramenta padronizada e qualquer cozinheiro capaz de ler o prato do colega e continuar de onde ele parou.
Em 2007, o Google era essa cozinha. Milhões de linhas de C++ e Java, compilações que levavam perto de uma hora e engenheiros gastando mais tempo decifrando abstrações uns dos outros do que resolvendo problemas. Rob Pike, Robert Griesemer e Ken Thompson — o mesmo Thompson que criou o Unix — decidiram atacar a causa, não o sintoma. A tese deles era desconfortável na época e continua sendo: uma linguagem melhora quando você remove recursos, não quando adiciona. Go nasceu sem herança de classes, sem exceções, sem sobrecarga de operadores e, na maior parte dos casos, com um único jeito óbvio de fazer cada coisa.
O custo dessa decisão é real: você vai escrever um pouco mais de código explícito do que escreveria em Python ou Ruby. O retorno também é real: qualquer pessoa lê qualquer código Go em segundos, o compilador processa projetos gigantes em segundos, e o binário final é um executável único que roda sem instalar runtime, máquina virtual ou dependência de sistema. Docker, Kubernetes, Terraform e Prometheus — a camada de infraestrutura que sustenta a internet moderna — são escritos em Go. No Brasil, é a linguagem por trás de sistemas de pagamento, bancos digitais e plataformas que processam milhões de requisições por dia.
Para quem chega de outra linguagem, duas diferenças aparecem já na primeira semana. Primeiro, Go é compilado e tipado estaticamente: uma classe inteira de erros que você conheceria em produção às três da manhã morre na compilação, antes de o programa existir. Segundo, Go trata concorrência como recurso central da linguagem, não como biblioteca: criar dezenas de milhares de tarefas simultâneas custa poucos megabytes. Você vai chegar lá no módulo de concorrência; por enquanto, basta saber que essa é a razão de tanta infraestrutura crítica escolher Go.
Se o seu dia a dia é JavaScript ou TypeScript, a mudança de postura é esta: não existe undefined is not a function em runtime, porque o compilador rejeita o programa antes. Não existe transpilação, bundler nem node_modules com dezenas de milhares de arquivos — o compilador resolve dependências e gera um binário. E o formato do código não é decidido por ESLint + Prettier + config de time: a ferramenta oficial gofmt formata de um único jeito, para todo mundo. Você perde flexibilidade sintática; ganha o fim das discussões sobre ela.
Este curso segue a mesma filosofia da linguagem: pouca cerimônia, muita prática. Você não vai assistir dez minutos de slides sobre história — vai compilar e rodar Go de verdade nesta página, nos próximos minutos, sem instalar absolutamente nada.
"./01-bem-vindo-ao-go/frames/frame-01.svg", "./01-bem-vindo-ao-go/frames/frame-02.svg", "./01-bem-vindo-ao-go/frames/frame-03.svg", "./01-bem-vindo-ao-go/frames/frame-04.svg" ]} />
Este é o menor programa Go útil que existe, e cada linha dele carrega uma decisão de design da linguagem. Vamos montá-lo peça por peça; no final, o conjunto compila e roda exatamente como está.
Todo arquivo Go começa declarando a qual pacote pertence. Pacote é a unidade de organização de código em Go — pense em um diretório de código com um nome. O nome main é especial: ele avisa ao compilador que este pacote vira um executável, e não uma biblioteca para outros programas importarem.
{/* <!-- chunk:1 --> */}
package main
A cláusula import traz pacotes da biblioteca padrão para dentro do arquivo. fmt — de format — cuida de entrada e saída formatada: imprimir no terminal, montar strings com valores, ler dados. Você vai usá-lo em praticamente todas as aulas. Um detalhe que já mostra a personalidade de Go: importar um pacote e não usar é erro de compilação, não aviso. Código morto não entra.
Entre para continuar nos slides, rodar o código e enfrentar os desafios.
Começar pela rota →ESTA ROTA E TODAS AS OUTRAS
Qualquer plano abre os 188 nós.
Mensal R$19,90 · anual R$149 · lifetime R$499. Todos têm garantia de 7 dias.