Le langage Go : usages et fonctionnement

Auteur : Publié le

En bref : Go est un langage de programmation généraliste, créé chez Google et développé en tant que projet open source. Il sert principalement à construire des services côté serveur, des outils en ligne de commande et des logiciels d’infrastructure. Il associe une syntaxe relativement simple, la compilation en code machine et des mécanismes intégrés de concurrence, c’est-à-dire d’organisation de plusieurs tâches dont l’exécution peut se chevaucher dans le temps.

Qu’est-ce qui distingue Go des autres langages ?

Le nom officiel du langage est Go, même si vous rencontrerez aussi le terme « Golang » dans les moteurs de recherche et les conversations. Ce terme ne désigne ni une autre version ni une technologie distincte. Go n’a pas non plus de lien avec le jeu de plateau du même nom.

Go est un langage à typage statique : les types de données sont vérifiés lors de la compilation, avant l’exécution du programme. Le compilateur transforme le code source en un programme destiné au système et à l’architecture de processeur choisis. Il permet aussi de détecter certaines erreurs en amont, par exemple l’utilisation de texte là où un nombre est attendu.

Le langage récupère automatiquement la mémoire dont le programme n’a plus besoin. Cette tâche est assurée par un mécanisme appelé ramasse-miettes, ou garbage collector. Le développeur n’a pas à libérer manuellement chaque zone de mémoire, mais il doit toujours surveiller la consommation des ressources et fermer les fichiers ou les connexions.

Go possède volontairement un nombre limité de constructions syntaxiques. Il ne propose pas l’héritage classique entre classes que l’on connaît en Java ; pour organiser les données et les comportements, il utilise notamment des structures et des interfaces. Les erreurs sont généralement renvoyées sous forme de valeurs que le code appelant doit vérifier explicitement.

À quoi sert Go ?

Go convient bien aux programmes qui communiquent sur le réseau, traitent des requêtes et relient différents systèmes. Sa bibliothèque standard prend notamment en charge HTTP, JSON, les fichiers et les tests. De nombreuses tâches de base peuvent donc être réalisées sans recourir à un vaste ensemble de bibliothèques supplémentaires.

Ses usages courants comprennent :

Une boutique en ligne peut, par exemple, disposer d’un service distinct écrit en Go qui récupère le statut des colis auprès de plusieurs transporteurs et fournit une réponse uniforme à l’espace client. Go constitue ici un choix pertinent grâce à ses outils réseau et à sa prise en charge des opérations concurrentes. Le langage ne résoudra toutefois pas, à lui seul, les problèmes liés aux limites des API externes, aux pannes ou à une logique de gestion des commandes incorrecte.

Comment fonctionne la concurrence en Go ?

Le principal mécanisme de concurrence de Go repose sur les goroutines : des tâches légères gérées par l’environnement d’exécution du langage. Faire précéder l’appel d’une fonction du mot go permet de l’exécuter de façon concurrente avec d’autres tâches. Une goroutine n’est pas un thread distinct du système d’exploitation ; l’environnement Go planifie l’exécution des goroutines sur des threads.

Les tâches peuvent communiquer au moyen de canaux, un mécanisme qui permet de transmettre des valeurs et de synchroniser leur travail. Des verrous sont également disponibles pour protéger les données partagées. L’utilisation de goroutines n’élimine pas automatiquement le risque d’interblocage ni celui d’accès simultanés dangereux à la mémoire.

Supposons qu’un programme doive vérifier la disponibilité de dix sites. Avec une approche séquentielle, il attend la réponse d’un site avant d’interroger le suivant. Avec une approche concurrente, il peut lancer plusieurs vérifications et attendre leurs résultats dans le même intervalle de temps, tout en fixant un nombre maximal de connexions et un délai d’attente.

La concurrence n’est pas la même chose que le parallélisme. La première concerne l’organisation des tâches ; le second, leur exécution réellement simultanée, par exemple sur plusieurs cœurs du processeur. Davantage de goroutines ne garantit pas un programme plus rapide : la limite peut venir de la base de données, du débit du réseau ou du coût de la synchronisation.

Quand choisir Go, et quand préférer un autre langage ?

Go est un candidat raisonnable pour créer un service réseau autonome ou un outil facile à exécuter sur des serveurs. Il est souvent possible de fournir un seul fichier exécutable, sans installer d’interpréteur distinct. Ce n’est toutefois pas une règle absolue : l’utilisation de bibliothèques C ou de fichiers externes peut introduire des dépendances supplémentaires.

Un autre langage peut être plus pratique dans les situations suivantes :

Il s’agit de repères, et non d’un classement des langages par qualité. Pour faire votre choix, tenez compte des bibliothèques disponibles, de l’expérience de l’équipe et des exigences propres au programme.

Comment commencer à apprendre Go ?

Installez la version stable actuelle en suivant les instructions du site officiel du projet Go et en vérifiant les prérequis pour votre système. Vérifiez ensuite l’installation avec la commande go version et créez un répertoire pour votre premier projet.

Enregistrez-y le fichier main.go :

package main

import "fmt"

func main() {
    fmt.Println("Bonjour, Go !")
}

Dans le terminal, exécutez go mod init exemple/bonjour pour créer un module, c’est-à-dire une unité d’organisation du projet et de gestion de ses dépendances. La commande go run . compile et exécute le programme, tandis que go build . crée un fichier exécutable. go fmt ./... assure le formatage du code, et les tests se lancent avec go test ./....

Pour l’exercice suivant, créez un programme qui vérifie le statut HTTP d’un site. Ajoutez la gestion des erreurs et un délai maximal d’attente, puis étendez-le seulement ensuite à la vérification concurrente de plusieurs adresses.

À lire aussi : Qu’est-ce que la 2FA ?

À lire aussi

Découvrez comment PHP-FPM traite les requêtes PHP, son rôle face au serveur web et comment adapter ses processus au trafic.
Découvrez BIND, logiciel libre de serveur DNS : ses rôles, la gestion des domaines et les cas où le déployer vous-même.
Découvrez le registre polonais REGON, son numéro, ses différences avec NIP et KRS et comment vérifier les données d’une entreprise.