Golang : le langage de programmation simplifié de Google
Le fait que Google représente maintenant bien plus que le nom d’un simple moteur de recherche est désormais assez évident. La gamme de produits comprend en effet des services Web utiles comme Google Maps, des plateformes de divertissement telles que YouTube et Google Music, Gmail qui est un service de messagerie, des solutions de bureau comme Google Docs et même du matériel tel que le smartphone Pixel. En outre, le géant californien fournit depuis des années des outils précieux aux développeurs Web et logiciels. Depuis mars 2012, par exemple, le langage de programmation de plus en plus populaire « Go », également connu sous le nom de Golang, fait partie du portefeuille de services Internet de la firme américaine.
Qu’est-ce que Golang ?
En septembre 2007, les développeurs de Google, Robert Griesemer, Rob Pike et Ken Thompson ont formulé leurs objectifs pour créer un langage de programmation optimisé et simplifié, jetant ainsi les bases de Go ou langage Go fréquemment nommé au final Golang. Ce qui a commencé comme un projet réduit s’est rapidement transformé en un projet ambitieux, que Google a consciemment fait avancer en fournissant à l’entreprise les ressources nécessaires. Après l’introduction officielle de Go en tant que projet open source (licence BSD) fin 2011, Go a rapidement trouvé un grand nombre de soutiens dans la communauté, qui est toujours impliquée dans le développement et l’optimisation du langage de programmation. La version finale de la première version stable (1.0) a eu lieu le 28 mars 2012 et depuis la version 1.1, qui a suivi un an plus tard, Google publie des mises à jour régulièrement (tous les six mois environ).
Le logo original de Golang est un gauphre (Gopher en anglais) réalisé par Renée French, célèbre dessinatrice qui a aussi créé le lapin Glenda du système d’exploitation Plan 9. Rob Pike et Ken Thompson ont également joué un rôle déterminant dans le système d'exploitation Unix développé par Bell Labs dans les années 1980. En avril 2018, le logo de Go a été remplacé par un Go stylisé mais la figure du Gauphre reste cependant encore fortement utilisée.
La syntaxe de Golang est fortement orientée vers la syntaxe de base de la famille C, mais montre des influences claires des langages développés par Niklaus Wirth comme Pascal, Modula et Oberon. En outre, des aspects de langages tels que Newsqueak et Limbo ont été incorporés, qui à leur tour sont inspirés de l’algèbre de processus de Tony Hoare CSP (Communicating Sequential Processes). Golang est compilable, et l’accent a été mis dès le début sur une vitesse de traduction élevée. De plus, le langage de programmation dispose d’un système de collecte automatique des déchets mémoire appelé ramasse-miettes ou récupérateur de mémoire (en anglais Garbage Collection en abrégé GC), qui assure une gestion optimale des ressources mémoire disponibles en arrière-plan et évite ainsi les problèmes de mémoire.
Comment classer Golang comme langage de programmation ?
Bien que Golang soit encore relativement jeune comparé à d’autres langages de programmation, il est déjà si mature et stable qu'il est utilisé par les développeurs du monde entier et Google lui-même fait également usage des possibilités de son langage de programmation. Le langage Go se caractérise en particulier par sa simplicité et sa multifonctionnalité, que les développeurs avaient à l'esprit dès le départ. La principale raison du développement d’un nouveau langage de programmation était surtout une insatisfaction à l'égard des représentants établis, qui se caractérisent soit par une compilation efficace du code, une exécution rapide du code ou un processus de programmation simple, mais en aucun cas par les trois avantages en même temps.
En combinant des caractéristiques importantes de différentes familles de langues, Golang donne ainsi un bon exemple de synthèse : le langage de Google combine la facilité de programmation, qui définit un langage dynamique, avec l’efficacité et la sécurité d’un langage compilé et typé de manière statique. De plus, la structure de Go vise à permettre un processus de développement court qui autorise même de créer de gros fichiers exécutables sur un seul ordinateur en quelques secondes. Quelques-unes des principales caractéristiques distinctives de Golang qui permettent d’atteindre ce niveau de qualité sont :
- un système de types expressif mais léger pour une classification et une différenciation optimales des différents objets (variables, fonctions, etc.).
- la programmation simultanée (programmation concurrente) pour une exécution plus rapide du programme.
- le récupérateur automatique de mémoire (GC) mentionnée ci-dessus pour une gestion optimale de la mémoire disponible évitant ainsi d’éventuels problèmes liés à la mémoire.
- une spécification stricte des dépendances sans syntaxe complexe de déclaration.
- Indépendance de la plateforme, permettant l’utilisation d’applications développées sur tous les systèmes courants.
Programmer avec Golang : un aperçu des caractéristiques
La syntaxe de Go est basée sur la syntaxe classique de C, mais diffère du langage de programmation déjà développé en 1972 via un certain nombre de petites améliorations et une portée considérablement réduite. Par exemple, lors de la programmation avec Golang, il n’y a pas obligatoirement de crochets pour les conditions et le point-virgule final typique pour la famille C est facultatif. De plus, la validité des identificateurs (noms des éléments nommés) peut être réglée par l’écriture (majuscule ou minuscule). Si, par exemple, un identificateur doit être actif en dehors d’un certain paquet Go, il est nécessaire de mettre la première lettre en majuscule. Dans ce qui suit, d’autres caractéristiques sont énumérées pour réaliser de la programmation avec Golang :
- Environnement GOPATH comme base : une des premières actions obligatoires lors de la programmation avec Go est d’ouvrir le répertoire GOPATH comprenant les trois sous-répertoires « src » (fichiers sources Go), « pkg » (paquet Go objets « package objects ») et « bin » (commandes exécutables). Tout code Go écrit peut être géré via cet espace de travail, y compris les dépendances correspondantes. L’emplacement de stockage de ce répertoire GOPATH obligatoire peut être choisi librement.
- Structure modulaire avec les paquets GOLANG (Packages) : dans Golang, les fichiers sources peuvent être organisés de manière modulaire via des répertoires, qui sont appelés Packages, soit des paquets. Le nom du répertoire respectif est donc aussi le nom du paquet auquel appartiennent tous les fichiers sources qui se trouvent dans ce répertoire. Si des fonctions, des types, etc. doivent être utilisés pour tous les paquets, il faut utiliser les majuscules de l’identificateur correspondant.
- Formatage uniforme et prédéfini du code : Golang donne certaines conventions pour le formatage du code, par exemple pour la distance exacte entre les éléments individuels. Ainsi, si vous avez appris à programmer des applications avec Golang, vous pouvez facilement lire le code d’autres développeurs sans avoir à déchiffrer leur style de formatage personnel, comme c'est le cas avec de nombreux autres langages. L’auteur n'est pas tenu de respecter le format jusque dans les moindres détails : l’outil intégré gofmt optimise automatiquement le code Golang écrit en corrigeant le formatage incorrect.
- Relative Importe comme standard : tous les fichiers et paquets que vous importez dans les projets Golang (que ce soit de votre propre projet ou celui d’un tiers) sont toujours relatifs au répertoire GOPATH/src, ce qui rend l’importation très facile. De plus, Go ne compile pas les éléments importés à moins qu’ils ne soient réellement utilisés. De cette façon, un code propre est garanti même si les composants importés ne sont pas ou plus utilisés.
- Valeurs de retour multiples pour les fonctions et les méthodes : Go peut être utilisé pour créer des fonctions et des méthodes qui peuvent retourner plusieurs valeurs. Ceci permet à Go, par exemple, de séparer proprement un résultat valide d’une erreur de retour spécifiée de manière alternative. En C, par exemple, les erreurs d’écriture sont exprimées par une valeur de compteur négative, alors que le code d’erreur réel est enregistré séparément.
Points forts et domaines d’applications de Golang
De nombreux points forts de Golang ont déjà été mentionnés plus haut dans cet article : en raison de sa simplicité, le langage de Google offre aux développeurs un degré de simplicité élevé par rapport à de nombreux autres langages de programmation. Ceux qui ont intégré les bases bénéficient d'une opération simple et de nombreux automatismes, ce qui représente au final un gain de temps considérable. Avec ces outils, gofmt par exemple, à action individuelle, pour l’optimisation automatique du code, Go fournit également la réponse parfaite aux tâches qui sont de plus en plus complexes et qui doivent être maîtrisées dans le développement logiciel. De plus, le code de Golang est toujours formaté de la même manière, ce qui simplifie considérablement la lisibilité générale et donc le travail en équipe.
Un autre point fort de la programmation Golang est la bonne performance du langage de programmation. La vitesse d’exécution des applications Go est généralement convaincante par rapport aux autres langages de compilation. Par exemple, la vitesse de compilation est à peu près la même que pour Java. Cependant, alors que de nombreuses applications Java s’appuient sur le framework Spring et prennent un certain temps à démarrer, par exemple pour répondre aux requêtes HTTP, les services Golang tirent parti des implémentations existantes de la bibliothèque standard, accélérant ainsi considérablement le processus de démarrage.
Par conséquent, il n'est pas surprenant que Golang ait été utilisé jusqu'à présent principalement dans l’environnement des entreprises et des serveurs, où la stabilité et la performance des services jouent un rôle primordial. Le jeune langage de programmation est particulièrement demandé pour la virtualisation basée sur les conteneurs, ce qui est notamment dû au fait que Docker est probablement le représentant le plus important des plateformes conteneur basées sur Go.
Où les autres langages de programmation ont-ils l’avantage ?
Malgré toutes les éloges pour le langage de programmation moderne de Google, il ne faut cependant pas oublier de noter quelques faiblesses mineures. Celles-ci sont principalement dues à la simplicité de Golang, qui certes d'une part constitue la plus grande force du Golang, mais d’autre part fait que le langage ne possède pas certaines facettes que des développeurs apprécient dans d’autres langages de programmation.
Tout d’abord, l’absence de types génériques (c’est-à-dire de types de données avec la possibilité de spécifier des paramètres de type individuels) dans la bibliothèque standard doit absolument être mentionnée. Ainsi, si vous êtes un partisan de la programmation de type et que vous avez l’habitude d’utiliser des génériques en Java, par exemple, vous devrez vous passer d’une fonctionnalité similaire dans Go jusqu’à présent (mais l’équipe Go n'exclut toutefois pas l’implémentation de types génériques dans une future version du langage). La renonciation aux classes, à l’héritage et aux constructeurs demande aussi un peu de temps pour s’y habituer et cela pour de nombreux développeurs. Une autre fonction de Go qui n'est pas toujours souhaitée est le masquage automatique des fichiers d’importation inactifs. D'autres langues marquent ici la possibilité de « commenter » les composants correspondants, de sorte qu'ils restent dans le code du programme malgré l’inactivité.
Un autre inconvénient de Golang par rapport aux autres langues classiques comme C, C++ se trouve dans le fait que ce langage est encore assez récent. Il dispose donc d’un arsenal beaucoup plus réduit de paquets standards implémentés et prêts à l’importation. De plus, il y a beaucoup moins de manuels, de tutoriels pour Go sur Internet que pour les langages de programmation établis depuis longtemps.
Tableau récapitulatif : avantages et inconvénients de Golang
Les forces de Golang | Les faiblesses de Golang |
Multiplateforme | Aucun type générique |
Syntaxe simplifiée | Seulement partiellement orienté objet |
Gestion automatique de la mémoire (via Garbage Collection) | Un support extensible aux environnements de développement (IDE pour Integrated Development Environments) |
Formatage de code unifié | Relativement peu de bibliothèques tierces et de progiciels tiers sont offerts |
Processus d’importation simple | Transition laborieuse des langages classiques orientés objet tels que Java et C++. |
Plusieurs valeurs de retour possibles pour les fonctions et les méthodes | Encore peu de tutoriels, experts, etc. |
Correction automatique du code (avec gofmt) | |
Programmation simultanée | |
Bibliothèque standard étendue (en particulier pour les tâches HTTP et réseau) |
Conclusion : pour qui Golang est-il un langage de programmation intéressant ?
Après avoir examiné les bases et les particularités du langage de programmation open source, une question surgit finalement : qui devrait prendre la peine d’apprendre à programmer avec Golang ? Comme c’est souvent le cas, il n’y a pas de réponse générale à cette question, car le langage Go n’a pas été développé pour remplacer tous les langages de programmation utilisés à ce jour, mais plutôt comme une alternative possible. Grâce à son efficacité et ses excellentes performances, qui se reflètent également dans les applications programmées, c’est un choix intéressant et pertinent en particulier dans le domaine des serveurs et le secteur des entreprises. Plus il y a de code à écrire et à compiler, plus ces avantages gagnent en importance.
Pour les programmeurs débutants, le processus d’apprentissage est souvent plus aisé : ils bénéficient en effet de la simplicité de ce langage moderne, ce qui peut cependant être frustrant pour les développeurs expérimentés en raison des similitudes avec C, Java et Co. Toutefois, une fois les difficultés du passage au langage Go surmontées, même les codeurs établis de longue date apprendront à apprécier les avantages offerts par Golang. Le marché des experts Go n’étant pas encore très vaste, le savoir-faire dans le langage de programmation Google offre donc une belle opportunité, que ce soit dans le cadre d’une candidature pour un poste de développeur ou bien pour la réalisation d’un nouveau projet.