Erros em Go são valores comuns que você retorna e confere. Aprenda a envolvê-los com contexto, achar a causa com errors.Is e errors.As, juntar vários de uma vez e deixar panic e recover para bugs de verdade.
Uma interface em Go é uma lista de métodos, e qualquer tipo com esses métodos a satisfaz sem precisar dizer isso. Veja method sets, Stringer, io.Reader, type switches e por que um error com um ponteiro nil dentro não é nil.
Structs em Go são valores, então toda atribuição e toda chamada fazem uma cópia. Ponteiros deixam você compartilhar uma única struct, e receivers de ponteiro são o jeito de um método mudar o valor em que foi chamado.
Uma string em Go é uma sequência de bytes somente leitura, normalmente UTF-8. Quando você enxerga isso, len contando bytes, o índice dando um byte, o range dando runes e um fatiamento que parte um caractere ao meio passam a fazer sentido.
Um map em Go guarda valores sob chaves e os encontra por hash. Veja por que uma chave ausente dá o zero value, por que escrever num map nil causa panic e por que a ordem de iteração muda de uma execução para outra.
Um slice em Go é uma pequena janela sobre um array que guarda os valores de verdade. Quando você enxerga a janela, len, cap, append e o bug em que dois slices mudam um ao outro deixam de ser mistério.
Funções em Go podem retornar vários valores, carregar variáveis como closures e agendar a limpeza com defer. Veja como cada um funciona, incluindo a ordem em que as chamadas adiadas rodam e quando os argumentos delas são fixados.
Go se vira com if, uma única palavra-chave de laço chamada for e um switch que não cai no próximo caso. Aprenda cada forma, a mudança do Go 1.22 que dá a cada iteração sua própria variável, e o break com label.
Toda variável em Go começa com um zero value, números nunca se convertem sozinhos e constantes são mais flexíveis que variáveis. Aprenda var, :=, inteiros com tamanho, overflow, iota e os verbos do Printf para inspecionar valores.
Um primeiro programa em Go precisa de uma ferramenta de linha de comando, um arquivo go.mod e um pacote chamado main. Veja o que go run, go build, gofmt e go vet fazem, e por que Go não compila código com um import sem uso.