>> Tecnologia Eletrônica >  >> Rádio via Satélite >> XM

Como Go (Golang) Funciona: Compilação, Concorrência, Memória e Runtime

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.