>> Technologie Électronique >  >> Radio par satellite >> XM

Comment fonctionne Go (Golang) : Compilation, Concurrence, Mémoire et Runtime

Go (Golang) est un langage à typage statique, compilé, conçu chez Google (2007, open-sourcé 2009) par Robert Griesemer, Rob Pike, Ken Thompson. Ce n'est pas « Gopher » — c'est la mascotte.

1. Pipeline de compilation

.go source → go build → SSA IR → Code machine (ELF/Mach-O/PE) → Binaire statique 
  • Pas de VM, pas d'interpréteur. Binaire unique = déploiement facile.
  • Compilation rapide : ~1M lignes/sec (Go 1.22+).
  • Cross-compile : `GOOS=linux GOARCH=amd64 go build` — pas d'installation toolchain sur cible.

2. Système de types

  • Statique, structurel (interfaces satisfaites implicitement), pas d'héritage.
  • Génériques (depuis 1.18) : paramètres de type, contraintes.
  • Valeurs nulles : `var x int` → 0 ; `var s string` → "" ; `var p *T` → nil.

3. Gestion mémoire

  • Analyse d'échappement (compile-time) : décide allocation tas vs pile.
  • Garbage Collector : Concurrent, tri-color mark-sweep, non-générationnel, faible latence (<1 ms typique). Réglable `GOGC`.
  • Pas de `free` manuel — mais `sync.Pool` pour réutilisation objets.

4. Concurrence (Modèle CSP)

  • Goroutines : Threads verts (2 Ko pile, grandit/rétrécit). Millions possibles.
  • Canaux : Typés, synchrones (non bufferisés) ou asynchrones (bufferisés). `select` pour multiplexage.
  • sync pkg : Mutex, RWMutex, WaitGroup, Once, Cond, Map.
  • Pas de sécurité data race — `go run -race` détecte à l'exécution.

5. Runtime

  • Ordonnanceur : M:N (M threads OS, N goroutines). Work-stealing.
  • Sysmon : Prémption, cadencement GC, netpoll.
  • Vdso, prémption asynchrone (1.14+), tas timers.

6. Bibliothèque standard (Batteries incluses)

  • net/http (serveur/client production-grade), crypto/tls, json, html/template, database/sql, testing, embed, time, context, sync, atomic, regexp, sort, flag, log/slog.

7. Outillage

  • `go fmt` / `go vet` / `go test -race` / `go doc` / `go mod` / `go work` / `pprof` / `trace`.
  • LSP : gopls (VS Code, GoLand, Neovim).

Cas d'usage typiques

  • Microservices cloud-native (Kubernetes, Docker, etcd, Prometheus écrits en Go).
  • Outils CLI (Hugo, Terraform, kubectl, fzf).
  • Services réseau haut débit (Cloudflare, Uber, Twitch, Dropbox).
  • Edge / WASM (TinyGo).

Go échange expressivité pour simplicité, vitesse compilation, déployabilité, et débit concurrence. C'est le langage de l'infrastructure moderne.

XM