Le fait que Google re­pré­sente main­te­nant 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 pla­te­formes de di­ver­tis­se­ment telles que YouTube et Google Music, Gmail qui est un service de mes­sa­ge­rie, des solutions de bureau comme Google Docs et même du matériel tel que le smart­phone Pixel. En outre, le géant ca­li­for­nien fournit depuis des années des outils précieux aux dé­ve­lop­peurs Web et logiciels. Depuis mars 2012, par exemple, le langage de pro­gram­ma­tion de plus en plus populaire « Go », également connu sous le nom de Golang, fait partie du por­te­feuille de services Internet de la firme amé­ri­caine.

Qu’est-ce que Golang ?

En septembre 2007, les dé­ve­lop­peurs de Google, Robert Griesemer, Rob Pike et Ken Thompson ont formulé leurs objectifs pour créer un langage de pro­gram­ma­tion optimisé et simplifié, jetant ainsi les bases de Go ou langage Go fré­quem­ment nommé au final Golang. Ce qui a commencé comme un projet réduit s’est ra­pi­de­ment trans­formé en un projet ambitieux, que Google a cons­ciem­ment fait avancer en four­nis­sant à l’en­tre­prise les res­sources né­ces­saires. Après l’in­tro­duc­tion of­fi­cielle de Go en tant que projet open source (licence BSD) fin 2011, Go a ra­pi­de­ment trouvé un grand nombre de soutiens dans la com­mu­nauté, qui est toujours impliquée dans le dé­ve­lop­pe­ment et l’op­ti­mi­sa­tion du langage de pro­gram­ma­tion. 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é­gu­liè­re­ment (tous les six mois environ).

Remarque

Le logo original de Golang est un gauphre (Gopher en anglais) réalisé par Renée French, célèbre des­si­na­trice qui a aussi créé le lapin Glenda du système d’ex­ploi­ta­tion Plan 9. Rob Pike et Ken Thompson ont également joué un rôle dé­ter­mi­nant dans le système d'ex­ploi­ta­tion 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 in­fluences claires des langages dé­ve­lop­pés par Niklaus Wirth comme Pascal, Modula et Oberon. En outre, des aspects de langages tels que Newsqueak et Limbo ont été in­cor­po­rés, qui à leur tour sont inspirés de l’algèbre de processus de Tony Hoare CSP (Com­mu­ni­ca­ting Sequential Processes). Golang est com­pi­lable, et l’accent a été mis dès le début sur une vitesse de tra­duc­tion élevée. De plus, le langage de pro­gram­ma­tion dispose d’un système de collecte au­to­ma­tique des déchets mémoire appelé ramasse-miettes ou ré­cu­pé­ra­teur de mémoire (en anglais Garbage Col­lec­tion en abrégé GC), qui assure une gestion optimale des res­sources mémoire dis­po­nibles en arrière-plan et évite ainsi les problèmes de mémoire.

Comment classer Golang comme langage de pro­gram­ma­tion ?

Bien que Golang soit encore re­la­ti­ve­ment jeune comparé à d’autres langages de pro­gram­ma­tion, il est déjà si mature et stable qu'il est utilisé par les dé­ve­lop­peurs du monde entier et Google lui-même fait également usage des pos­si­bi­li­tés de son langage de pro­gram­ma­tion. Le langage Go se ca­rac­té­rise en par­ti­cu­lier par sa sim­pli­cité et sa mul­ti­fonc­tion­na­lité, que les dé­ve­lop­peurs avaient à l'esprit dès le départ. La prin­ci­pale raison du dé­ve­lop­pe­ment d’un nouveau langage de pro­gram­ma­tion était surtout une in­sa­tis­fac­tion à l'égard des re­pré­sen­tants établis, qui se ca­rac­té­ri­sent soit par une com­pi­la­tion efficace du code, une exécution rapide du code ou un processus de pro­gram­ma­tion simple, mais en aucun cas par les trois avantages en même temps.

En combinant des ca­rac­té­ris­tiques im­por­tantes de dif­fé­rentes familles de langues, Golang donne ainsi un bon exemple de synthèse : le langage de Google combine la facilité de pro­gram­ma­tion, qui définit un langage dynamique, avec l’ef­fi­ca­cité 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é­ve­lop­pe­ment court qui autorise même de créer de gros fichiers exé­cu­tables sur un seul or­di­na­teur en quelques secondes. Quelques-unes des prin­ci­pales ca­rac­té­ris­tiques dis­tinc­tives de Golang qui per­met­tent d’atteindre ce niveau de qualité sont :

  • un système de types expressif mais léger pour une clas­si­fi­ca­tion et une dif­fé­ren­cia­tion optimales des dif­fé­rents objets (variables, fonctions, etc.).
  • la pro­gram­ma­tion si­mul­ta­née (pro­gram­ma­tion con­cur­rente) pour une exécution plus rapide du programme.
  • le ré­cu­pé­ra­teur au­to­ma­tique de mémoire (GC) men­tion­née ci-dessus pour une gestion optimale de la mémoire dis­po­nible évitant ainsi d’éventuels problèmes liés à la mémoire.
  • une spé­ci­fi­ca­tion stricte des dé­pen­dances sans syntaxe complexe de dé­cla­ra­tion.
  • In­dé­pen­dance de la pla­te­forme, per­met­tant l’uti­li­sa­tion d’ap­pli­ca­tions dé­ve­lop­pées sur tous les systèmes courants.

Pro­gram­mer avec Golang : un aperçu des ca­rac­té­ris­tiques

La syntaxe de Go est basée sur la syntaxe classique de C, mais diffère du langage de pro­gram­ma­tion déjà développé en 1972 via un certain nombre de petites amé­lio­ra­tions et une portée con­si­dé­ra­ble­ment réduite. Par exemple, lors de la pro­gram­ma­tion avec Golang, il n’y a pas obli­ga­toi­re­ment de crochets pour les con­di­tions et le point-virgule final typique pour la famille C est fa­cul­ta­tif. De plus, la validité des iden­ti­fi­ca­teurs (noms des éléments nommés) peut être réglée par l’écriture (majuscule ou minuscule). Si, par exemple, un iden­ti­fi­ca­teur doit être actif en dehors d’un certain paquet Go, il est né­ces­saire de mettre la première lettre en majuscule. Dans ce qui suit, d’autres ca­rac­té­ris­tiques sont énumérées pour réaliser de la pro­gram­ma­tion avec Golang :

  • En­vi­ron­ne­ment GOPATH comme base : une des premières actions obli­ga­toires lors de la pro­gram­ma­tion avec Go est d’ouvrir le ré­per­toire GOPATH com­pre­nant les trois sous-ré­per­toires « src » (fichiers sources Go), « pkg » (paquet Go objets « package objects ») et « bin » (commandes exé­cu­tables). Tout code Go écrit peut être géré via cet espace de travail, y compris les dé­pen­dances cor­res­pon­dantes. L’em­pla­ce­ment de stockage de ce ré­per­toire GOPATH obli­ga­toire 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é­per­toires, qui sont appelés Packages, soit des paquets. Le nom du ré­per­toire respectif est donc aussi le nom du paquet auquel ap­par­tien­nent tous les fichiers sources qui se trouvent dans ce ré­per­toire. Si des fonctions, des types, etc. doivent être utilisés pour tous les paquets, il faut utiliser les ma­jus­cules de l’iden­ti­fi­ca­teur cor­res­pon­dant.
  • Formatage uniforme et prédéfini du code : Golang donne certaines con­ven­tions pour le formatage du code, par exemple pour la distance exacte entre les éléments in­di­vi­duels. Ainsi, si vous avez appris à pro­gram­mer des ap­pli­ca­tions avec Golang, vous pouvez fa­ci­le­ment lire le code d’autres dé­ve­lop­peurs sans avoir à dé­chif­frer 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 au­to­ma­ti­que­ment le code Golang écrit en cor­ri­geant 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é­per­toire GOPATH/src, ce qui rend l’im­por­ta­tion très facile. De plus, Go ne compile pas les éléments importés à moins qu’ils ne soient réel­le­ment utilisés. De cette façon, un code propre est garanti même si les com­po­sants 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 pro­pre­ment un résultat valide d’une erreur de retour spécifiée de manière al­ter­na­tive. 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 en­re­gis­tré sé­pa­ré­ment.

Points forts et domaines d’ap­pli­ca­tions de Golang

De nombreux points forts de Golang ont déjà été men­tion­nés plus haut dans cet article : en raison de sa sim­pli­cité, le langage de Google offre aux dé­ve­lop­peurs un degré de sim­pli­cité élevé par rapport à de nombreux autres langages de pro­gram­ma­tion. Ceux qui ont intégré les bases bé­né­fi­cient d'une opération simple et de nombreux au­to­ma­tismes, ce qui re­pré­sente au final un gain de temps con­si­dé­rable. Avec ces outils, gofmt par exemple, à action in­di­vi­duelle, pour l’op­ti­mi­sa­tion au­to­ma­tique du code, Go fournit également la réponse parfaite aux tâches qui sont de plus en plus complexes et qui doivent être maî­tri­sées dans le dé­ve­lop­pe­ment logiciel. De plus, le code de Golang est toujours formaté de la même manière, ce qui simplifie con­si­dé­ra­ble­ment la li­si­bi­lité générale et donc le travail en équipe.

Un autre point fort de la pro­gram­ma­tion Golang est la bonne per­for­mance du langage de pro­gram­ma­tion. La vitesse d’exécution des ap­pli­ca­tions Go est gé­né­ra­le­ment con­vain­cante par rapport aux autres langages de com­pi­la­tion. Par exemple, la vitesse de com­pi­la­tion est à peu près la même que pour Java. Cependant, alors que de nom­breuses ap­pli­ca­tions 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 im­plé­men­ta­tions exis­tantes de la bi­blio­thèque standard, ac­cé­lé­rant ainsi con­si­dé­ra­ble­ment le processus de démarrage.

Par con­sé­quent, il n'est pas sur­pre­nant que Golang ait été utilisé jusqu'à présent prin­ci­pa­le­ment dans l’en­vi­ron­ne­ment des en­tre­prises et des serveurs, où la stabilité et la per­for­mance des services jouent un rôle pri­mor­dial. Le jeune langage de pro­gram­ma­tion est par­ti­cu­liè­re­ment demandé pour la vir­tua­li­sa­tion basée sur les con­te­neurs, ce qui est notamment dû au fait que Docker est pro­ba­ble­ment le re­pré­sen­tant le plus important des pla­te­formes conteneur basées sur Go.

Où les autres langages de pro­gram­ma­tion ont-ils l’avantage ?

Malgré toutes les éloges pour le langage de pro­gram­ma­tion moderne de Google, il ne faut cependant pas oublier de noter quelques fai­blesses mineures. Celles-ci sont prin­ci­pa­le­ment dues à la sim­pli­cité 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é­ve­lop­peurs ap­pré­cient dans d’autres langages de pro­gram­ma­tion.

Tout d’abord, l’absence de types gé­né­riques (c’est-à-dire de types de données avec la pos­si­bi­lité de spécifier des pa­ra­mètres de type in­di­vi­duels) dans la bi­blio­thèque standard doit ab­so­lu­ment être men­tion­née. Ainsi, si vous êtes un partisan de la pro­gram­ma­tion de type et que vous avez l’habitude d’utiliser des gé­né­riques en Java, par exemple, vous devrez vous passer d’une fonc­tion­na­lité similaire dans Go jusqu’à présent (mais l’équipe Go n'exclut toutefois pas l’im­plé­men­ta­tion de types gé­né­riques dans une future version du langage). La re­non­cia­tion aux classes, à l’héritage et aux cons­truc­teurs demande aussi un peu de temps pour s’y habituer et cela pour de nombreux dé­ve­lop­peurs. Une autre fonction de Go qui n'est pas toujours souhaitée est le masquage au­to­ma­tique des fichiers d’im­por­ta­tion inactifs. D'autres langues marquent ici la pos­si­bi­lité de « commenter » les com­po­sants cor­res­pon­dants, de sorte qu'ils restent dans le code du programme malgré l’inac­ti­vité.

Un autre in­con­vé­nient de Golang par rapport aux autres langues clas­siques 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 im­plé­men­tés et prêts à l’im­por­ta­tion. De plus, il y a beaucoup moins de manuels, de tutoriels pour Go sur Internet que pour les langages de pro­gram­ma­tion établis depuis longtemps.

Tableau ré­ca­pi­tu­la­tif : avantages et in­con­vé­nients de Golang

Les forces de Golang Les fai­blesses de Golang
Mul­ti­pla­te­forme Aucun type générique
Syntaxe sim­pli­fiée Seulement par­tiel­le­ment orienté objet
Gestion au­to­ma­tique de la mémoire (via Garbage Col­lec­tion) Un support ex­ten­sible aux en­vi­ron­ne­ments de dé­ve­lop­pe­ment (IDE pour In­te­gra­ted De­ve­lop­ment En­vi­ron­ments)
Formatage de code unifié Re­la­ti­ve­ment peu de bi­blio­thèques tierces et de pro­gi­ciels tiers sont offerts
Processus d’im­por­ta­tion simple Tran­si­tion la­bo­rieuse des langages clas­siques 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.
Cor­rec­tion au­to­ma­tique du code (avec gofmt)  
Pro­gram­ma­tion si­mul­ta­née  
Bi­blio­thèque standard étendue (en par­ti­cu­lier pour les tâches HTTP et réseau)  

Con­clu­sion : pour qui Golang est-il un langage de pro­gram­ma­tion in­té­res­sant ?

Après avoir examiné les bases et les par­ti­cu­la­ri­tés du langage de pro­gram­ma­tion open source, une question surgit fi­na­le­ment : qui devrait prendre la peine d’apprendre à pro­gram­mer 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 pro­gram­ma­tion utilisés à ce jour, mais plutôt comme une al­ter­na­tive possible. Grâce à son ef­fi­ca­cité et ses ex­cel­lentes per­for­mances, qui se reflètent également dans les ap­pli­ca­tions pro­gram­mées, c’est un choix in­té­res­sant et pertinent en par­ti­cu­lier dans le domaine des serveurs et le secteur des en­tre­prises. Plus il y a de code à écrire et à compiler, plus ces avantages gagnent en im­por­tance.

Pour les pro­gram­meurs débutants, le processus d’ap­pren­tis­sage est souvent plus aisé : ils bé­né­fi­cient en effet de la sim­pli­cité de ce langage moderne, ce qui peut cependant être frustrant pour les dé­ve­lop­peurs ex­pé­ri­men­tés en raison des si­mi­li­tudes avec C, Java et Co. Toutefois, une fois les dif­fi­cul­tés du passage au langage Go sur­mon­tées, même les codeurs établis de longue date ap­pren­dront à 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 pro­gram­ma­tion Google offre donc une belle op­por­tu­nité, que ce soit dans le cadre d’une can­di­da­ture pour un poste de dé­ve­lop­peur ou bien pour la réa­li­sa­tion d’un nouveau projet.

Aller au menu principal