backend / go
Pourquoi Go, installation, premier programme
Explication
Un peu d'histoire
Go est créé chez Google par Robert Griesemer, Rob Pike et Ken Thompson (deux légendes du C et d'Unix), à partir de 2007, puis annoncé publiquement en 2009. Le déclencheur est très concret : chez Google, une simple compilation C++ d'un gros service pouvait prendre plusieurs dizaines de minutes, et la gestion des dépendances devenait ingérable à l'échelle de milliers d'ingénieurs. Go 1.0 sort en mars 2012 avec une promesse de stabilité à long terme (la fameuse "Go 1 compatibility promise") qui tient encore aujourd'hui.
Pourquoi apprendre Go aujourd'hui
Go est devenu le langage de référence de l'infrastructure cloud moderne : Docker, Kubernetes, Terraform, Prometheus et etcd sont tous écrits en Go. Les entreprises qui construisent des API à fort trafic (Uber, Twitch, Cloudflare, Shopify) l'utilisent massivement pour sa compilation rapide, son exécutable unique sans dépendance, et sa concurrence native pensée pour les services réseau. C'est aujourd'hui une compétence très recherchée côté backend et DevOps, avec un marché de l'emploi solide en France comme à l'international.
Ce que vous allez apprendre
- Comprendre pourquoi Go a été créé et ce qui le distingue de C++ ou Java
- Installer Go et vérifier la version avec
go version - Initialiser un module avec
go mod initet comprendre à quoi il sert - Écrire, exécuter (
go run) et compiler (go build) ton premier programme - Utiliser les outils standards
gofmtetgo vetdès le premier jour
Dans quel contexte ?
Imagine que tu rejoins une équipe backend qui migre une partie de ses microservices de Python vers Go pour réduire la latence et la consommation mémoire en production. Le tout premier réflexe, avant même d'écrire une ligne de logique métier, c'est de savoir initialiser un module Go proprement (go mod init github.com/monequipe/service-facturation) pour que le projet soit compatible avec le reste de l'écosystème de l'entreprise.
D'abord, une différence fondamentale avec un langage interprété
Contrairement à Python ou JavaScript, Go est un langage compilé : ton code source .go est transformé en un binaire natif exécutable directement par le système d'exploitation, sans interpréteur à installer sur la machine cible. C'est ce qui permet un déploiement aussi simple qu'un scp d'un seul fichier.
Cette compilation reste étonnamment rapide comparée à C++ ou Rust, grâce à des choix de conception volontaires (pas de généricité complexe à la C++, un système de paquets simple). C'est un vrai confort au quotidien : un go build sur un projet de taille moyenne prend quelques secondes, pas plusieurs minutes.
Ensuite, il faut comprendre l'organisation minimale d'un programme
Tout fichier Go appartient à un package. Le point d'entrée d'un programme exécutable est toujours le même : un fichier qui déclare package main et qui contient une fonction func main(), sans aucun paramètre ni valeur de retour.
| Commande | Rôle | Quand l'utiliser |
|---|---|---|
go run main.go | Compile puis exécute directement, sans garder le binaire | Développement itératif, tests rapides |
go build | Compile et produit un binaire durable | Avant un déploiement |
go vet | Analyse statique, détecte des erreurs suspectes | Systématiquement, avant un commit |
gofmt -w | Reformate le code au style officiel | Systématiquement, souvent via l'éditeur |
Prérequis
Aucune connaissance préalable de Go n'est nécessaire. Une base de programmation dans n'importe quel langage (variables, fonctions) suffit pour suivre cette leçon.
Un détail qui surprend les débutants
Go n'a pas de fichier de configuration exotique pour gérer ses dépendances : le fichier go.mod, généré par go mod init, joue ce rôle en une poignée de lignes. Il fixe le nom du module (souvent une URL de dépôt Git) et la version de Go utilisée.
Bonne pratique
Exécute gofmt -w (ou configure ton éditeur pour le faire à la sauvegarde) sur chaque fichier avant de le committer. La communauté Go n'a qu'un seul style de formatage officiel, ce qui évite toute discussion stérile sur l'indentation dans les revues de code.
Le piège classique
Beaucoup de débutants oublient que package main et func main() sont indissociables : un fichier package main sans fonction main() (ou l'inverse, une fonction main() dans un autre package) ne produira jamais d'exécutable, avec une erreur de compilation parfois peu explicite au premier abord.
Maintenant que ton environnement tourne et que tu as compilé ton premier binaire, il est temps de regarder de plus près comment Go représente les données : c'est l'objet de la prochaine leçon sur les types de base et les variables.
Commandes & code
Pourquoi Go, installation, premier programme
Go : compile, typé statiquement, garbage collecté, conçu pour la concurrence et les services réseau.
# Verifier l'installation
go version
# Initialiser un module (equivalent package.json / requirements.txt)
mkdir mon-projet && cd mon-projet
go mod init exemple.com/mon-projet// fichier: main.go
package main
import "fmt"
// Point d'entree obligatoire : func main() dans package main
func main() {
fmt.Println("Hello, Go!")
}# Executer sans compiler de binaire
go run main.go
# Compiler un binaire natif
go build -o app main.go
./app
# Formatter automatiquement le code (obligatoire dans la communaute Go)
gofmt -w main.go
go vet ./... # detecte les erreurs suspectesRésumé
- Un programme Go est un ensemble de fichiers
.gogroupés enpackage. package main+func main()= point d'entrée exécutable.go runpour itérer vite,go buildpour produire un binaire.gofmtetgo vetsont des outils standards à utiliser systématiquement.
Exercices pratiques
Mission : sauver la migration Python vers Go de l'équipe facturation
Objectif : Diagnostiquer un module Go mal initialisé et un fichier qui ne compile jamais, puis produire un binaire distribuable.
Contexte
Ton équipe migre le service de facturation de Python vers Go pour réduire la latence. Un collègue te transmet un dossier facturation/ avec un fichier main.go qui contient package main mais aucune fonction main() n'a encore été écrite, et aucun go.mod n'existe. Il te demande de rendre ce projet compilable et livrable avant la fin de journée.