Voltar ao blog

A forma mais rápida de aprender Go em 2026

O Go Developer Survey 2025 inquiriu 5.379 programadores de Go no ativo. Eis o roteiro que segue aquilo que realmente constroem, como o colocam em produção e onde encontram mais dificuldades.

A forma mais rápida de aprender Go em 2026

A maioria dos roteiros para programadores de Go assenta em palpites. Enumeram todos os frameworks com que alguém alguma vez pôs um package main em produção e chamam a isso um plano de aprendizagem. Este parte de outro lado: no final de 2025, 5.379 programadores de Go no ativo contaram à equipa do Go para que usam realmente o Go, como o colocam em produção e onde tropeçam. O roteiro que se segue baseia-se nesses dados.

Se vais começar a aprender Go em 2026, lê isto antes de passares três semanas às voltas com o Gin.

Resumo rápido

  • Salta o conteúdo de «introdução à programação». Abre o Tour of Go e pratica com a toolchain (go run, go build, go mod) até conseguires compilar e executar um programa Go a partir do terminal sem pensar.
  • Lê o Effective Go cedo. Para 33 % dos inquiridos, «garantir que o nosso código Go segue as boas práticas e o estilo idiomático» é a principal frustração, à frente de qualquer funcionalidade em falta.
  • Constrói os dois tipos de projeto que 73 % a 74 % dos programadores de Go no ativo realmente põem em produção: ferramentas de linha de comandos e serviços API/RPC.
  • Aprende net/http e a biblioteca padrão antes de qualquer framework. Podes acrescentar um framework mais tarde, se um projeto precisar dele.
  • A seguir, concorrência: goroutines, channels e cancelamento com context. Escreve testes à medida que avanças.
  • A equipa do Go não publica nenhum roteiro «oficial», por isso desconfia um pouco de quem diga ter um. Este guia apoia-se antes no inquérito, na documentação do Go e nos criadores da linguagem.
  • Queres o caminho completo? O roteiro interativo do LevelUpGo leva-te do hello world até aplicações em produção.
flowchart LR
    A["Stage 1<br/>Toolchain + Tour of Go"] --> B["Stage 2<br/>Effective Go + Idioms"] --> C["Stage 3<br/>Concurrency"]
    D["Stage 4<br/>CLI + HTTP service"] --> E["Stage 5<br/>Testing + Standard library"] --> F["Stage 6<br/>Frameworks (only when needed)"]

As seis etapas do roteiro, com os frameworks no fim.

O que 5.379 programadores de Go disseram à equipa do Go em 2025

A equipa do Go faz todos os anos um inquérito aos programadores. Os resultados de 2025, publicados em janeiro de 2026, reuniram 7.070 respostas, das quais 5.379 passaram a limpeza de dados. Dos inquiridos, 87 % são programadores profissionais e 82 % usam Go no trabalho principal. (fonte)

Estes números do inquérito decidem a ordem de tudo o que vem a seguir:

SinalValorO que significa
Tipo de projeto mais comumFerramentas de linha de comandos (74 %)Se saltares o capítulo das CLI, estás a saltar ¾ do que os programadores de Go no ativo constroem.
Segundo tipo de projetoServiços API/RPC (73 %)Quase empatado com as CLI. Juntos cobrem a maior parte do trabalho em Go.
Destino de deployContentores Linux (96 %)O teu código vai correr em Linux, por isso aprende docker build cedo.
Principal frustraçãoEstilo idiomático / boas práticas (33 %)Há mais gente com dificuldades em saber «o que é idiomático» do que a queixar-se de alguma funcionalidade em falta.
Quota de editoresVS Code 37 %, GoLand 28 %Qualquer um serve. Escolhe um e volta a escrever código.
xychart-beta
    title "What Go developers build, 2025 survey"
    x-axis ["CLIs", "API services", "Libraries", "Cloud infra", "ML tools"]
    y-axis "Percent of respondents" 0 --> 100
    bar [74, 73, 49, 33, 11]

As CLI e os serviços API lideram com grande vantagem. Constrói um de cada antes de escolheres um framework.

Etapa 1: a toolchain e o teu primeiro programa

A sequência oficial «Getting Started» da equipa do Go é curta de propósito: instalar o Go, executar um hello world, perceber o comando go e escrever um módulo. (fonte)

Ganha à-vontade com três coisas antes de tudo o resto:

  1. O comando go. go run, go build, go install, go fmt, go test, go mod. Não precisas de decorar as flags, mas deves saber a que comando recorrer em cada situação.
  2. Módulos. go mod init <name> cria o go.mod, e ao acrescentares imports o go.sum é atualizado por ti. Existem workspaces com vários módulos, mas não vais precisar deles tão cedo.
  3. A Tour of Go. Foi escrito por Russ Cox, e a equipa do Go recomenda-o como primeiro recurso interativo. Faz todos os exercícios.

Um primeiro programa tem este aspeto:

example.gogo
package main

import "fmt"

func main() {
    fmt.Println("hello, go")
}

Executa-o sem um passo de compilação:

example.gogo
$ go run main.go
hello, go

Não tens de configurar um pipeline de build antes de conseguires executar alguma coisa. A maioria dos programas Go pequenos mantém-se assim tão simples.

Etapa 2: Effective Go (o passo que a maioria dos roteiros ignora)

O Effective Go é citado a toda a hora, mas pouca gente o lê cedo. A equipa do Go chama-lhe «leitura obrigatória para qualquer programador que esteja a começar em Go», e está disponível de graça no site oficial.

33 % dos programadores de Go no ativo apontam «garantir que o nosso código Go segue as boas práticas e o estilo idiomático do Go» como a sua maior frustração. Isso fica acima de «faltam funcionalidades na linguagem» (28 %) e de «módulos fiáveis» (26 %). A sintaxe é a parte fácil. O difícil é escrever código que outros programadores de Go leiam e reconheçam como Go normal.

Lê-o depois do Tour e antes de qualquer framework. Em cerca de 50 páginas densas, aborda nomes, tratamento de erros, interfaces, concorrência e formatação.

Eis o género de coisa que ensina, a forma padrão de tratar um erro:

example.gogo
file, err := os.Open(path)
if err != nil {
    return fmt.Errorf("open %s: %w", path, err)
}
defer file.Close()

O erro é verificado logo. Envolvê-lo com %w mantém a cadeia intacta, para que quem chama ainda o possa inspecionar com errors.Is e errors.As. A limpeza fica num defer em vez de num bloco finally.

Vais encontrar este padrão em qualquer código Go que abras. Quem salta o Effective Go acaba muitas vezes por reinventá-lo, e mal. O nosso curso Go Idioms & Naming põe-te a praticar estes padrões de forma interativa, mas o documento original é grátis e é a fonte de referência.

Etapa 3: concorrência tal como o código Go real a usa

A concorrência é a funcionalidade do Go que as pessoas aprendem só por aprender e depois usam mal. Fixa-se melhor quando a aprendes através das peças que o código Go real usa: goroutines, channels e context.

Precisas pelo menos destas três:

  • As goroutines arrancam com go someFunc(). Não são threads do sistema operativo. O runtime distribui-as por um pequeno pool de threads.
  • Os channels são os tubos tipados através dos quais as goroutines se coordenam. make(chan T) para um channel sem buffer, make(chan T, n) para um com buffer.
  • context.Context é a forma de cancelar trabalho que atravessa fronteiras de funções ou de goroutines. Hoje em dia, as APIs bloqueantes da biblioteca padrão recebem um context.

A combinação mais comum distribui o trabalho por goroutines, recolhe os resultados num channel e para mais cedo se o context for cancelado.

sequenceDiagram
    participant Caller
    participant Main as fetchAll
    participant G as Worker goroutines
    participant Ch as Results channel
    Caller->>Main: ctx, urls
    Main->>G: spawn one goroutine per URL
    G->>Ch: send result
    Caller-->>Main: ctx cancel signal
    Ch->>Main: collect via select
    Main->>Caller: results

Distribuir, recolher e parar ao cancelar. Os servidores Go usam esta forma internamente.

example.gogo
func fetchAll(ctx context.Context, urls []string) []result {
    out := make(chan result, len(urls))
    for _, u := range urls {
        go func(u string) {
            out <- fetch(ctx, u)
        }(u)
    }
    results := make([]result, 0, len(urls))
    for range urls {
        select {
        case r := <-out:
            results = append(results, r)
        case <-ctx.Done():
            return results
        }
    }
    return results
}

É o select sobre ctx.Done() que permite à função retornar de forma limpa quando quem chama cancela. O net/http e o database/sql fazem o mesmo internamente.

Quando fazer select sobre um context te sair naturalmente, já dominas a parte da concorrência de que o código Go do dia a dia depende. Concurrency Fundamentals cobre o resto do modelo de forma interativa.

Etapa 4: constrói uma CLI e um serviço HTTP

São os dois tipos de projeto que 73 % a 74 % dos programadores de Go no ativo põem em produção. (fonte) Constrói uma de cada antes de tocares num framework.

Uma CLI. O pacote flag faz parte da biblioteca padrão, e muitas CLI que já usas (kubectl, docker, terraform, gh) são escritas em Go. Uma CLI mínima tem este aspeto:

example.gogo
package main

import (
    "flag"
    "fmt"
)

func main() {
    name := flag.String("name", "world", "who to greet")
    flag.Parse()
    fmt.Printf("hello, %s\n", *name)
}
example.gogo
$ go build -o greet . && ./greet --name=patrik
hello, patrik

O resultado é um binário ligado estaticamente que podes passar a outra pessoa e que simplesmente funciona. Na maioria das outras linguagens de backend, chegar aqui dá mais trabalho. O curso Building CLI Apps aborda subcomandos, códigos de saída e formatação da saída.

Um serviço HTTP. O net/http também faz parte da biblioteca padrão, por isso não precisas do Gin nem do Echo para pôr um em produção.

example.gogo
package main

import (
    "encoding/json"
    "net/http"
)

func main() {
    http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
        json.NewEncoder(w).Encode(map[string]string{"status": "ok"})
    })
    http.ListenAndServe(":8080", nil)
}

Isto é um servidor HTTP funcional sem dependências. Junta-lhe logging estruturado, encaminhamento a sério (o http.ServeMux melhorou muito no Go 1.22) e testes, e tens um serviço API.

Etapa 5: testes e biblioteca padrão antes dos frameworks

O go test vem com o Go, e a maioria dos testes em Go é orientada por tabelas (table-driven), como este.

example.gogo
func TestAdd(t *testing.T) {
    cases := []struct {
        name     string
        a, b, want int
    }{
        {"zero", 0, 0, 0},
        {"positive", 2, 3, 5},
        {"negative", -1, 1, 0},
    }
    for _, tc := range cases {
        t.Run(tc.name, func(t *testing.T) {
            if got := Add(tc.a, tc.b); got != tc.want {
                t.Errorf("Add(%d, %d) = %d, want %d", tc.a, tc.b, got, tc.want)
            }
        })
    }
}
example.gogo
$ go test -v ./...
=== RUN   TestAdd
=== RUN   TestAdd/zero
=== RUN   TestAdd/positive
=== RUN   TestAdd/negative
PASS

Não há biblioteca de asserções nem framework de mocks envolvidos. O tutorial oficial da equipa do Go tem um capítulo sobre fuzzing (go test -fuzz), e o pacote testing suporta benchmarks (go test -bench) de raiz. Professional Go Testing aborda os padrões de que precisas quando os teus testes crescem para lá dos exemplos triviais.

No inquérito do segundo semestre de 2024, «manter normas de código consistentes» foi o principal desafio, com 58 %. Os testes permitem a uma equipa garantir a consistência de forma automática, em vez de discutir o assunto na revisão de código.

Outros pacotes da biblioteca padrão que vale a pena aprender bem, mais ou menos por esta ordem:

  • errors, fmt: envolver erros com %w, errors.Is, errors.As.
  • io, os: readers, writers e manipulação de ficheiros.
  • encoding/json: struct tags, encoders e decoders.
  • context: já abordado acima.
  • net/http: já abordado acima.
  • database/sql: pool de ligações e prepared statements. Acrescenta pgx ou sqlite mais tarde.
  • log/slog: logging estruturado, adicionado no Go 1.21. Substitui o log por este logo no primeiro dia.

Etapa 6: quando (e se) aprender frameworks web

A maioria dos roteiros publicados põe o Gin, o Echo e o Fiber perto do início. O próprio material de introdução da equipa do Go usa o Gin, mas o Effective Go e os tutoriais da biblioteca padrão usam o net/http diretamente. O material oficial contradiz-se mesmo neste ponto, e nós ficamos do lado da biblioteca padrão.

Eis porquê:

  • O net/http está no runtime. Os frameworks são dependências que tens de manter a cada atualização do Go.
  • O inquérito de 2025 aponta «módulos Go fiáveis» como a terceira maior frustração (26 %). Escolher um framework costuma ser a primeira vez que quem começa em Go esbarra nisto.
  • As melhorias do http.ServeMux no Go 1.22 eliminaram a maioria das razões de encaminhamento que levavam as pessoas a escolher o Gin. O encaminhamento por método e os parâmetros de caminho já estão na biblioteca padrão.

Aprende um framework quando um projeto precisar realmente de um. O Gin e o Echo servem bem. O Fiber contorna completamente o net/http e corre sobre o fasthttp, o que traz os seus próprios problemas de compatibilidade de middleware.

Se o trabalho for «construir uma API JSON para uma startup», net/http com chi (um router leve e idiomático) é uma combinação da qual não vais precisar de migrar.

Carreira e salário em Go: o que dizem os dados (e o que não dizem)

Não existe nenhum conjunto de dados público e rigoroso que discrimine os salários especificamente para Go. O End of Year Pay Report 2025 da Levels.fyi abrange 245.000 registos de 5.000 empresas e não separa por linguagem de todo. (fonte)

Eis o que existe:

  • O Developer Survey 2025 do Stack Overflow indica que o Go é usado por 16,4 % de todos os inquiridos e por 17,4 % dos programadores profissionais, o que o coloca em 13.º lugar entre as linguagens de programação. (fonte)
  • O salário autodeclarado de «Go Developer» nos EUA no Glassdoor, consultado em abril de 2026, indica uma média de 133.673 USD, com o percentil 25 nos 105.368 USD e o percentil 75 nos 171.400 USD. Como são dados autodeclarados, valem menos do que dados de folhas de vencimento.
  • O Go Developer Survey 2025 mostra que 75 % dos inquiridos têm 6 ou mais anos de experiência profissional em desenvolvimento. A maioria dos programadores de Go já tinha uma carreira em backend antes do Go, e «programador de Go» raramente é o primeiro emprego de alguém.

Ou seja, o Go não é uma linguagem que se aprende num bootcamp para arranjar emprego seis semanas depois. É muito usado em empresas que pagam bem (Google, Cloudflare, Uber e Datadog têm todas muito Go em produção), e é uma segunda competência forte em cima de experiência em backend. A nossa comparação honesta de Go vs Rust para backend mostra como as duas se comparam em termos de contratação.

Para o roteiro, isto significa que não deves planear em função dos dados salariais. Torna-te bom a construir coisas, e as oportunidades de emprego vêm atrás.

Uma ressalva: a equipa do Go não tem um roteiro oficial

A equipa do Go publica o Tour of Go, o Effective Go, a especificação da linguagem, o índice da documentação e o inquérito aos programadores. Nenhum deles é um roteiro. O artefacto oficial mais próximo é a página go.dev/learn, que agrupa os recursos em nível principiante, intermédio e avançado.

Todos os «roteiros para programadores de Go» que encontras na internet foram escritos pela comunidade, incluindo este. O repositório de roteiro de Alikhll no GitHub, com 18,4 mil estrelas, ainda diz «in 2021» no README. O roteiro de Go do roadmap.sh é bom, mas comercial. Os roteiros do Medium copiam-se, na maioria, uns aos outros.

Por isso, encara o rótulo com ceticismo. O caminho que se aguenta é o Tour oficial, depois o Effective Go, depois CLI e serviços HTTP, com a concorrência aprendida em cargas de trabalho reais e os testes escritos à medida que avanças. Os frameworks ficam para o fim.

Perguntas frequentes

Quanto tempo demora a tornar-me programador de Go?

Se já trabalhas em backend noutra linguagem, três meses de prática regular chegam para pôr Go em produção. A partir do zero, conta com 9 a 12 meses, e espera passar boa parte desse tempo a aprender como funcionam os sistemas em vez de aprender sintaxe.

Preciso de uma licenciatura em Informática para ser programador de Go?

Não. O inquérito de 2025 não acompanha a formação académica como critério de contratação, e o peso do Go em funções de DevOps e platform engineering faz com que muitos programadores de Go tenham chegado através de operações ou como autodidatas.

Devo aprender Gin/Echo/Fiber como principiante?

Não como primeiro passo. Constrói um serviço com net/http de ponta a ponta para perceberes o encaminhamento, o middleware e o ciclo de vida de um pedido. Junta um framework mais tarde, se o teu projeto beneficiar realmente com um.

Qual é a melhor forma de praticar Go depois do Tour?

Constrói as duas coisas que os programadores de Go no ativo põem em produção: uma CLI e um serviço HTTP. Depois acrescenta testes e um Dockerfile. Isso cobre cerca de 80 % do dia a dia de uma função júnior em Go.

O Go ainda tem procura em 2026?

Sim. O inquérito do Stack Overflow de 2025 mostra o uso de Go nos 17,4 % entre programadores profissionais, mais 2 pontos percentuais do que em 2024. O Go Developer Survey mostra 91 % de satisfação (63 % «muito satisfeitos») pelo sétimo ano consecutivo.

Por onde continuar

Se queres um caminho interativo que siga as etapas acima, o curso Go Fundamentals do LevelUpGo aborda por ordem a toolchain, o estilo idiomático, a concorrência, a biblioteca padrão e os testes. O plano grátis cobre o básico. O Pro desbloqueia os cursos de projeto, onde constróis as CLI e os serviços HTTP que este roteiro recomenda.

Escreve Go como um engenheiro sénior

Lições interativas no navegador. As primeiras são grátis.

Experimenta uma lição grátisOu cria uma conta gratuita