Guide d'introduction à Go

Ce guide vous montrera comment commencer à apprendre le langage Go. D'un point de vue syntaxique, il n'est pas difficile à apprendre, vous pouvez probablement commencer en quelques jours. Cependant, selon la convention, avant de commencer officiellement, nous devons d'abord comprendre son contexte et ses origines.
Contexte
Le langage Go a été créé par trois personnalités importantes :
- Ken Thompson, lauréat du prix Turing, fondateur du système Unix, créateur du langage B, créateur du langage C
- Rob Pike, l'un des auteurs du système d'exploitation Plan9, l'un des inventeurs de l'UTF-8, leader de la conception du langage Go
- Robert Griesemer, développeur du moteur JS V8, le plus jeune des trois
Il y a aussi Renee French, l'épouse de Rob Pike, qui a conçu le logo du langage Go, qui est un tamia bleu.

Un jour, alors que les trois ingénieurs s'ennuyaient pendant l'attente de la compilation d'un projet C++, Rob Pike a soudainement eu une idée novatrice : il voulait concevoir un langage de programmation simple, compact, à compilation rapide, tout en ayant des performances décentes, afin qu'ils n'aient plus à faire face à de longues attentes à chaque compilation. Après un bref brainstorming, les trois ont tenu une courte réunion le 20 septembre 2007 et ont commencé à discuter et concevoir un prototype préliminaire de ce langage. C'est à partir de ce moment que le langage Go est officiellement né. Par la suite, cette petite équipe a attiré de plus en plus de développeurs partageant les mêmes idées, et finalement le 10 novembre 2009, Google a officiellement open-source le langage Go sous la licence BSD-3-Clause, a lancé la première version préliminaire et a formé une équipe de développement officielle.
Note
Il est à noter que vous pourriez voir certaines personnes l'appeler Golang ailleurs, y compris le nom du dépôt Github de ce site qui s'appelle également Golang-Doc, mais son nom officiel a toujours été Go. Au début, comme le nom de domaine go avait été enregistré, le nom de domaine du site officiel a donc adopté golang.org, ce qui a conduit les nouveaux venus à penser à tort qu'il s'appelait Golang.

Par la suite, l'équipe Go a passé trois ans à concevoir et développer, et a publié la première version officielle Go1.0 en mars 2012 (à cette époque, la chaîne d'outils et le runtime de Go étaient encore écrits en langage C, jusqu'à ce que Go1.5 soit auto-hébergé), puis deux petites versions ont été publiées chaque année, et ont été maintenues jusqu'à présent.
Les trois fondateurs se sont en fait retirés il y a longtemps. Pendant la plupart du temps, le leader de l'équipe était Russ Cox, qui avait participé au développement avant même que le langage Go ne soit publié publiquement, et a ensuite dirigé l'équipe Go pendant 12 ans, jusqu'à sa démission en août 2024, où Austin Clements a pris la relève et a dirigé le travail de développement ultérieur.
Si vous souhaitez approfondir l'histoire du langage Go, consultez Go History pour en savoir plus.
Caractéristiques
- Syntaxe simple Le langage Go a fait des compromis entre liberté et flexibilité, en échange d'une meilleure maintenabilité et d'une courbe d'apprentissage plus douce.
- Déploiement convivial Les fichiers binaires compilés statiquement de Go ne dépendent pas d'un environnement d'exécution supplémentaire, et la vitesse de compilation est également très rapide.
- Compilation croisée Go n'a besoin que de définir deux paramètres simples lors de la compilation pour compiler un programme qui peut fonctionner sur d'autres plateformes.
- Concurrence native Le support de la concurrence du langage Go est natif, il suffit d'un mot-clé pour démarrer une coroutine asynchrone.
- Ramasse-miettes Go a d'excellentes performances GC, dans la plupart des cas, le délai GC ne dépasse pas 1 milliseconde.
- Bibliothèque standard riche Du traitement des chaînes de caractères à l'analyse AST du code source, une bibliothèque standard puissante et riche est une base solide pour le langage Go.
- Chaîne d'outils complète Go dispose d'une chaîne d'outils de développement complète, couvrant la compilation, les tests, la gestion des dépendances, l'analyse des performances, etc.
Le langage Go a abandonné l'héritage, a affaibli la POO, les classes, la métaprogrammation, les génériques, les expressions Lambda, etc. Il possède de bonnes performances et une faible difficulté d'apprentissage. Il convient au développement de services cloud, au développement de serveurs d'applications et à la programmation réseau. Il est livré avec un GC, les développeurs n'ont pas besoin de gérer manuellement la mémoire, et la compilation statique et la compilation croisée sont également très conviviales pour les opérations.
Les inconvénients du langage Go sont également nombreux, tels que la gestion des erreurs critiquée, les génériques incomplets, bien que la bibliothèque standard soit riche, il n'y a que quelques structures de données intégrées, les types interface{} sont omniprésents, il n'y a pas de type énuméré, et en plus, l'équipe de développement Go est très têtue, n'est pas douée pour écouter les opinions de la communauté, etc. (En comparaison, Rust fait beaucoup mieux en matière de gestion des erreurs, de génériques, de gestion des dépendances, d'énumérations, d'interfaces, etc.)
En général, nous devons considérer un langage de manière dialectique. En tant que langage d'ingénierie, Go peut largement améliorer le niveau minimum d'une équipe, même si le niveau des développeurs est médiocre, il peut toujours assurer un minimum, il est rare qu'une seule personne gâche tout. En même temps, en raison de la syntaxe simple et de la faible difficulté d'apprentissage, on peut rapidement commencer un projet. Bien que Go n'existe que depuis une dizaine d'années, un nombre considérable d'entreprises ont fait de Go leur langage de choix, ce qui montre également que Go devient progressivement populaire.
Soit dit en passant, Go est également un langage entièrement open-source, maintenu par la communauté et Google. L'adresse officielle est dans le dépôt Google, il y a un dépôt miroir identique sur Github, et si vous le souhaitez, vous pouvez également participer à la conception du langage.
Site officiel : The Go Programming Language
Dépôt open-source Google : google/go: Google Open Source
Dépôt Github : golang/go: The Go programming language
TIP
L'auteur a déjà soumis une PR à Go, si vous souhaitez savoir comment contribuer du code à Go, vous pouvez consulter cet article que j'ai écrit : Comment contribuer du code à Go.
Je pense que beaucoup de gens ont plus ou moins entendu parler de Rust, c'est un langage de programmation généraliste haute performance, sa date de naissance est d'un an avant Go, Go1 a été officiellement publié en 2012, la version officielle de Rust a été publiée en 2015, ce sont tous deux des langages relativement modernes, j'aime beaucoup ces deux langages, ils se développent dans des domaines différents, si vous n'êtes pas satisfait de l'efficacité d'exécution et de la capacité d'expression de Go, vous pouvez essayer Rust, mais sa difficulté d'apprentissage est loin d'être aussi simple que Go.
Installation
Téléchargement de Go : Downloads - The Go Programming Language

Stable Version fait référence aux deux versions stables actuellement maintenues, Archived Version fait référence aux versions historiques qui ne sont plus maintenues, consultez Journal des modifications pour en savoir plus sur les règles de maintenance et les informations sur les versions historiques.
Windows
Pour la plateforme Windows, il y a deux types disponibles : installer et archive. Le premier est un package d'installation, il suffit de cliquer, le second est recommandé, il vous permettra de mieux comprendre la structure des répertoires du langage Go, et vous ne serez pas perdu en cas de problème à l'avenir. Choisissez de télécharger le fichier zip, le fichier compressé contient le code source du langage Go ainsi que la chaîne d'outils et une documentation, décompressez-le dans un chemin spécifié, puis vous devez configurer deux variables d'environnement système.
- GOROOT - Chemin d'installation du langage Go
- GOPATH - Chemin de stockage des dépendances du langage Go
Après configuration, ajoutez deux nouveaux éléments à la variable d'environnement système PATH
%GOROOT%\bin: C'est l'adresse du programme binaire Go%GOPATH%\bin: C'est l'adresse de stockage des fichiers binaires des dépendances tierces qui seront téléchargées à l'avenir
Exécutez la commande go version dans powershell, si la version s'affiche correctement, cela signifie que l'installation est correcte.
PS C:\user\username> go version
go version go1.21.3 windows/amd64Pour la mise à jour, il suffit de télécharger un nouveau zip pour remplacer le répertoire d'installation d'origine.
Linux
Prenons Ubuntu comme exemple, copiez le lien de la version souhaitée, téléchargez-le localement
$ wget https://golang.google.cn/dl/go1.21.1.linux-amd64.tar.gzDécompressez dans le répertoire spécifié
$ tar -C ~/go -xzf go1.21.1.linux-amd64.tar.gzDéfinissez les variables d'environnement dans le fichier $HOME/.bashrc
export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/binAprès avoir terminé, vérifiez la version installée pour confirmer l'installation correcte
$ go version
go version go1.21.1 linux/amd64Pour la mise à jour, il suffit de télécharger un nouveau tar.gz pour remplacer le répertoire d'installation d'origine.
Gestion de l'installation
La méthode d'installation ci-dessus est suffisante pour une utilisation de base, je recommande personnellement d'utiliser la structure de répertoires suivante pour stocker le langage Go et ses fichiers dérivés
go/
|
|--root/
| |
| |--go1.21.3/
| |
| |--go1.20.10/
|
|--mod/
| |
| |--bin/
| |
| |--libs/
|
|--cache/
|
|--temp/
|
|--envExplications :
- Le répertoire
go/rootest utilisé pour stocker les fichiers source des différentes versions du langage Go go/modcorrespond àGOPATHgo/mod/libscorrespond àGOMODCACHE, c'est-à-dire l'adresse de stockage des dépendances tierces téléchargéesgo/mod/bincorrespond àGOBIN, l'adresse de stockage des fichiers binaires des dépendances tiercesgo/cache, correspond àGOCACHE, stocke les fichiers cachego/temp, correspond àGOTMPDIR, stocke les fichiers temporairesgo/env, correspond àGOENV, fichier de configuration des variables d'environnement globales
Cette méthode ne nécessite pas de remplacer le répertoire d'installation d'origine lors de la mise à jour, il suffit de le stocker dans le répertoire go/root, puis de modifier la variable d'environnement système GOROOT pour le dossier de la version spécifiée dans ce répertoire. Par défaut, le fichier env est lu depuis le chemin GOROOT/env, en définissant la variable système GOENV, il est séparé de GOROOT, évitant ainsi les changements de configuration des variables d'environnement Go lors des changements de version. Voici la configuration initiale du fichier env.
GO111MODULE=on
GOCACHE=go/cache
GOMODCACHE=go/mod/libs
GOBIN=go/mod/bin
GOTMPDIR=go/tempC'est juste un style de répertoire que je préfère, consultez Commandes - Variables d'environnement pour en savoir plus sur les variables d'environnement, vous pouvez personnaliser selon vos préférences.
Gestion multi-versions
J'ai écrit un outil de gestion multi-versions govm, qui fonctionne mieux avec la structure de répertoires ci-dessus. Il peut gérer plusieurs versions Go locales, vous pouvez changer de version à tout moment, rechercher et télécharger d'autres versions Go et les installer localement.
$ govm search 1.22 -n 10
go1.22.6 76 MB
go1.22.5 76 MB
go1.22.4 76 MB
go1.22.3 76 MB
go1.22.2 76 MB
go1.22.1 76 MB
go1.22.0 76 MB
$ govm install 1.22.4
Fetch go1.22.4 from https://dl.google.com/go/go1.22.4.windows-amd64.zip
Downloading go1.22.4.windows-amd64.zip 100% |████████████████████████████████████████| (76/76 MB, 32 MB/s) [2s]
Extract go1.22.4.windows-amd64.zip to local store
Remove archive from cache
Version go1.22.4 installed
$ govm use 1.22.4
Use go1.22.4 now
# Reconnecter le shell
$ go version
go version go1.22.4 windows/amd64Si vous souhaitez savoir comment écrire des outils en ligne de commande avec Go, vous pouvez prendre govm comme référence de projet, il est également écrit en Go.
Éditeur
Pour les IDE Go principaux, je recommande personnellement seulement les deux suivants :
- goland : produit par jetbrain, puissant, support complet, mais payant, vous pouvez envisager la version communautaire IDEA avec des plugins
- vscode : gratuit, éditeur universel, avec des plugins, peut écrire dans n'importe quel langage
Si vous avez d'autres éditeurs qui correspondent mieux à vos habitudes d'utilisation, vous pouvez également les utiliser, l'éditeur n'a pas d'importance, si vous écrivez seulement du code d'exercice court, vous pouvez essayer goplay fourni officiellement, qui permet d'exécuter du code Go en ligne.
TIP
Si vous utilisez JetBrains Toolbox, vous pouvez essayer un outil en ligne de commande que j'ai écrit AutoToolBox, qui peut générer un menu contextuel Windows pour Toolbox, comme illustré ci-dessous.

Encouragement
La difficulté globale du langage Go n'est pas élevée, si vous avez des bases dans d'autres langages, l'apprentissage sera très simple. Si vous rencontrez des points difficiles à comprendre pendant l'apprentissage, vous pouvez les sauter temporairement. L'apprentissage de n'importe quel langage commence par une compréhension générale de la syntaxe et de la structure du langage, puis approfondit certaines caractéristiques et détails. La philosophie de la documentation est également la même, adaptée à l'apprentissage pour débutants. L'auteur n'est qu'un étudiant ordinaire, il peut y avoir des omissions et des erreurs, si vous trouvez des erreurs, vous pouvez soumettre une PR sur Github, si vous trouvez que la documentation est bonne, vous pouvez mettre une étoile sur Github.
Si vous êtes un développeur de langages fortement POO, comme Java, C#, etc., veuillez ne pas aborder avec des idées préconçues de la POO, sinon vous trouverez de nombreuses conceptions de Go incompréhensibles, et vous serez très mal à l'aise lors de l'écriture de code, l'auteur a commencé ainsi.
Aperçu
Voici une introduction simple au contenu de ce site, afin que vous puissiez lire selon vos besoins, certaines pages vides signifient qu'elles n'ont pas encore été mises à jour.
- Introduction au langage : Principalement sur le langage Go lui-même, plutôt théorique.
- Bases de la syntaxe : Principalement sur des règles de syntaxe très basiques, comme
if,for, etc. - Syntaxe avancée : Sur des choses uniques à Go, concernant les modules, les tests, les coroutines, etc.
- Bibliothèque standard : Une introduction simple à la bibliothèque standard de Go, car le contenu de la bibliothèque standard est vraiment trop vaste, donc mis à jour de temps en temps.
- Principes d'implémentation : Principalement sur certains principes de conception interne du langage Go, comme la planification des coroutines, la gestion de la mémoire, le ramasse-miettes, etc.
- Bases de la syntaxe : Principalement sur des règles de syntaxe très basiques, comme
- Écosystème communautaire : Principalement sur l'écosystème autour de Go, plutôt applicatif.
- Base de données : Opérer les bases de données principales avec Go.
- Microservices : Présentation de certains outils de microservices liés à Go.
- Bibliothèques tierces : Présentation de certaines bibliothèques tierces écrites en Go, mises à jour de temps en temps, vous pouvez également consulter directement Navigation des dépendances.
Allez à Préparation pour commencer pour commencer l'apprentissage
