Langage compilé, multiplate-forme, open-source
Version actuelle : 1.14 (25/02/2020)
Licence BSD
Site officiel : golang.org
Téléchargement
Bac à sable (Playground) : play.golang.org
Go est né en 2007 dans les locaux de Google. Il s’agit d’un langage assez récent, prenant d’emblée en compte les architectures modernes, et conçu pour être simple, concurrent et performant.
Ses priorités : compiler très vite quel que soit le volume de l’application ; gérer de manière optimale les processeurs à plusieurs cœurs ; toujours privilégier la simplicité et la rétrocompatibilité au fil de ses évolutions ; optimiser la gestion de la mémoire ; produire des exécutables sans dépendances.
Initialement créé pour faire des monolithes de très bas niveau pour Google, il s’est finalement montré particulièrement adapté aux architectures orientées services de par sa capacité à monter en charge, sa productivité et sa facilité de déploiement.
Pour faire des recherches sur le langage via internet, aidez-vous du mot clé Golang.
Un langage simple
Go est volontairement un langage minimaliste. Il ne possède que 25 mots clés censés ne jamais évoluer. Toute nouvelle fonctionnalité est ajoutée à la librairie standard, sous forme de nouvelles fonctions, jamais au langage lui-même. La rétrocompatibilité est assurée depuis la version 1.0.
À cela s'ajoute une syntaxe très formalisée : une ligne de code sera toujours représentée de la même manière quel que soit le projet. L'application gofmt, installée avec le compilateur Go, garantit cela. Ce qui a pour conséquence qu'un code Go est toujours très cohérent et lisible par quiconque connaissant un tant soit peu le langage, sans qu'il ait besoin de s'initier au préalable aux styles particuliers du projet.
Go garantit ainsi une base de connaissance commune entre les développeurs, rapide à apprendre et pérenne. De ce fait, il facilite la maintenance sur le long terme.
Un langage concurrent
Go a été conçu pour gérer de manière efficace et performante la concurrence. L'environnement d'exécution de Go est capable d'exécuter ses fils d'exécution sur plusieurs cœurs de processeurs simultanément, ce qui lui permet d'ordonnancer au mieux les routines concurrentes à moindre coût, sans jamais avoir à créer de nouveaux processus, ni que le développeur n'ait à s'en soucier. Ces processus lancés à l'initialisation puis mutualisés sont vraiment des processus de système d'exploitation, et cela fonctionne sur tous les ordinateurs pour lesquels Go est capable de compiler.
Côté code, la syntaxe pour paralléliser est on ne peut plus simple : l'ajout du mot clé go devant le nom d'une fonction suffit pour indiquer que celle-ci doit s'exécuter dans son propre fil d’exécution.
Exemples d’application
Go peut être utilisé dans de nombreux contextes.
Il est actuellement très prisé dans le cadre des architectures orientées services, figurant comme le langage idéal pour développer des micro-services et permettant de déployer des containers extrêmement légers.
En programmation système ou embarquée, il peut remplacer le C/C++, apportant une grande rapidité de compilation, un environnement d’exécution adapté à plus de 16 plateformes et une meilleure gestion des erreurs tout en étant extrêmement performant.
Il est également très pratique pour l'écriture de scripts parallélisables.
Parmi quelques célèbres exemples d'utilisation de Go, on citera évidemment Docker et Kubernetes, mais aussi Dropbox, Uber, Google, Heroku, Twitch (Amazon), Ubuntu, Shopify.
Les résultats de l'enquête organisée chaque année par les développeurs de Go vous donneront également un aperçu des utilisateurs de Go et des raisons qui les ont poussés à opter pour ce langage.
IDE
Il existe des outils dédiés à Go. Vous en trouverez notamment une liste (en anglais) sur le blog d'IntelligentBee.
Si vous avez déjà un éditeur favori, il existe de nombreuses extensions fournissant toute la puissance et le confort du développement Go (go-plus pour Atom, vscode-go pour Visual Studio Code, GoSublime pour Sublime Text, etc.). Les outils de développement pour Go sont généralement puissants et simples à intégrer avec les autres outils, si bien que son support est relativement équivalent d'un éditeur à l'autre. Les fonctionnalités les plus courantes étant l'autocomplétion, le formatage automatique lors de la sauvegarde, la détection immédiate des erreurs de compilation, etc.