Go (Golang) é linguagem tipada estaticamente, compilada, desenhada no Google (2007, open-source 2009) por Robert Griesemer, Rob Pike, Ken Thompson. Não é "Gopher" — esse é o mascote.
1. Pipeline Compilação
.go source → go build → SSA IR → Código Máquina (ELF/Mach-O/PE) → Binário Estático
- Sem VM, sem interpretador. Binário único = deploy fácil.
- Compilação rápida: ~1M linhas/seg (Go 1.22+).
- Cross-compile: `GOOS=linux GOARCH=amd64 go build` — sem toolchain no alvo.
2. Sistema de Tipos
- Estático, estrutural (interfaces satisfeitas implicitamente), sem herança.
- Generics (desde 1.18): parâmetros tipo, constraints.
- Valores zero: `var x int` → 0; `var s string` → ""; `var p *T` → nil.
3. Gerenciamento Memória
- Escape Analysis (compile-time): decide heap vs stack allocation.
- Garbage Collector: Concorrente, tri-color mark-sweep, não-geracional, baixa latência (<1 ms típico). Ajustável `GOGC`.
- Sem `free` manual — mas `sync.Pool` para reuso objetos.
4. Concorrência (Modelo CSP)
- Goroutines: Green threads (stack 2 KB, cresce/diminui). Milhões possíveis.
- Channels: Tipados, síncronos (unbuffered) ou assíncronos (buffered). `select` para multiplexação.
- sync pkg: Mutex, RWMutex, WaitGroup, Once, Cond, Map.
- Sem segurança data race — `go run -race` detecta em runtime.
5. Runtime
- Scheduler: M:N (M threads OS, N goroutines). Work-stealing.
- Sysmon: Preempção, pacing GC, netpoll.
- Vdso, preempção assíncrona (1.14+), heap timers.
6. Biblioteca Padrão (Baterias Inclusas)
- net/http (servidor/cliente production-grade), crypto/tls, json, html/template, database/sql, testing, embed, time, context, sync, atomic, regexp, sort, flag, log/slog.
7. Tooling
- `go fmt` / `go vet` / `go test -race` / `go doc` / `go mod` / `go work` / `pprof` / `trace`.
- LSP: gopls (VS Code, GoLand, Neovim).
Casos Uso Típicos
- Microserviços cloud-native (Kubernetes, Docker, etcd, Prometheus escritos em Go).
- CLI tools (Hugo, Terraform, kubectl, fzf).
- Serviços rede alta vazão (Cloudflare, Uber, Twitch, Dropbox).
- Edge / WASM (TinyGo).
Go troca expressividade por simplicidade, velocidade compilação, deployability, e vazão concorrência. É a linguagem da infraestrutura moderna.