Retour au cours

backend / go

Pourquoi Go, installation, premier programme

Leçon 11 exercice

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 init et comprendre à quoi il sert
  • Écrire, exécuter (go run) et compiler (go build) ton premier programme
  • Utiliser les outils standards gofmt et go vet dè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.

CommandeRôleQuand l'utiliser
go run main.goCompile puis exécute directement, sans garder le binaireDéveloppement itératif, tests rapides
go buildCompile et produit un binaire durableAvant un déploiement
go vetAnalyse statique, détecte des erreurs suspectesSystématiquement, avant un commit
gofmt -wReformate le code au style officielSysté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.

bash
# 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
go
// fichier: main.go
package main

import "fmt"

// Point d'entree obligatoire : func main() dans package main
func main() {
	fmt.Println("Hello, Go!")
}
bash
# 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 suspectes

Résumé

  • Un programme Go est un ensemble de fichiers .go groupés en package.
  • package main + func main() = point d'entrée exécutable.
  • go run pour itérer vite, go build pour produire un binaire.
  • gofmt et go vet sont des outils standards à utiliser systématiquement.

Exercices pratiques

1 disponible
1

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.

Résoudre l’exercice →