Go (Golang)

Compétence
Intérêt

Go (alias Golang) est un langage de programmation compilé (comme C entre autres). Créé en 2009 par Google, il est sous licence BSD (open source).

Go(lang) fait partie de mon combo favoris : Node.js, React.js, Go, Linux, Docker, GIT (+ café et musique d'ambiance).

On retrouve Go dans les domaines suivants (entre autres) :

  • Web
  • Logiciels
  • Jeux vidéos
  • Mobile (iOS et Android)
  • Serveurs (HTTP, sockets, microservices, API REST, ...)
  • Bases de données
  • Systèmes embarqués
  • IoT (Internet Of Things)
  • Timeseries
  • Outils systèmes et réseaux
  • Monitoring
  • Blockchain

L'objectif du langage est d'être le plus simple et le plus efficace possible. Il est souvent comparé au C, du fait que Go répond aux mêmes critères de performances et de conceptions de programmes compilés proches de la machine.

Pour simplifier la lecture, ci-dessous je mentionne uniquement C pour englober C et C++.

Go est une alternative viable au C. Les performances sont proches du C et on peut y importer des packages écrits en C, dans un programme écrit en Go !

Aussi, la compilation est cross-platform ! On peut compiler depuis la même machine pour les autres plateformes (Windows, Mac, Linux, ARM, mobile, 32 bits, 64 bits). La compilation est bien plus rapide que pour un programme équivalent écrit en C ou en Java.

De bonnes raisons (entre autres) qui font que Go est souvent mis avant (avec Rust) en tant que challenger crédible pour remplacer le C.

Beaucoup d'entreprises, notamment des gros acteurs tels que Netflix, Paypal, Google, Facebook l'utilisent.

Qui utilise Go ?

Aujourd'hui, bon nombres d’entreprises à l’échelle internationale ont adoptées Go en tant que langage complémentaire ou principal.

Dans le lot, voici les plus connus : Google (sur Youtube, l'infra cloud, ...), Facebook, Twitter, Netflix, Paypal, Intel, IBM, Dropbox, Docker.

Encore des exemples ?
OVH, eBay, Adobe, Uber, Disqus, Mozilla, Oracle, Stripe, Square, Yahoo!, Pinterest, MongoDB, Airbnb, Booking.com, Reddit, Twitch, SoundCloud, Imgur, Flipboard, Medium, Github, Gitlab, VMware, Yandex, General Electric Software, Zenly, Getty Images, GlobalSign, Mattel IoT, Canonical, CloudFlare, MaxCDN, DigitalOcean, Dell, Nokia, Ethereum, BBC, (bien d'autres ont déclaré utiliser Go), ... Vous ?

Go est chez tous les leaders et géants de leurs secteurs, pour de bonnes raisons.

Pourquoi Go ?

Parmi les langages de programmations permettant la conception d'un programme à haute performance, compilé, proche du système, la référence est le C.

Du coup, pourquoi nombreux sont ceux qui délaissent C en faveur de Go ?

  • Go est beaucoup plus simple et maintenable.
  • Le C oblige les programmeurs à s'occuper de détails fastidieux et sources de bugs.
  • L'approche de la modularité du C est restée au niveau de ce qui se faisait au début des années 1970, et largement dépassée depuis par d'autres langages.
  • La faible productivité du C par rapport aux langages plus récents.
  • Go compile beaucoup plus rapidement les exécutables (produit final), pour toutes les plateformes (cross-compil).
  • Le Workflow de Go est moderne et attractif.
  • La mascotte (Gopher) ?

Il y a aussi un grand nombre de développeurs Java qui migrent progressivement vers le langage Go.

Pour la culture

Go a été initialement conçu par 3 pointures qui méritent d'être mentionnées :

  • Robert Griesemer :
    • Un des ingénieur travaillant sur le moteur V8 JavaScript utilisé dans Chrome.
  • Rob Pike :
    • Un des ingénieur travaillant sur Unix à partir de la 8eme édition, coauteur de l'UTF-8 (avec Ken Thompson), ...
  • Ken Thompson :
    • Concepteur du langage B (précurseur du C qui est inspiré par le langage B), concepteur des systèmes Unix, coauteur de l'UTF-8 (avec Rob Pike), j'en passe (sa carrière professionnelle impressionnante).

A cela, on ajoute les différents contributeurs de chez Google et autres, ça donne une belle brochette de savoir faire.

Sous le capot

Go est un langage de programmation qui implémente nativement la concurrence (processus multiplexés sur plusieurs threads) au travers de 2 concepts : les goroutines et les channels. Go est doté d'un garbage collector (ramasse-miettes), il est typé statiquement, compilé nativement avec lien statique.

Un programme écrit en Go ne requière aucune dépendance externe (runtime, VM, interpréteur, ...) comme c'est le cas pour Java, Javascript, PHP, Python, etc ni de surcouches abstraites, ... Le programme écrit en Go est compilé en un binaire exécutable (fonctionnel sur tout type d'environnement) embarquant nativement son propre runtime.

La compilation est bien plus rapide que la compilation d'un programme équivalent écrit en C, C++ ou en Java. Du coup le développeur n'attend pas plusieurs fois par jour de longues secondes ou minutes la compilation de son code pour tester le résultat de chaque implémentation.

Go veut faciliter et accélérer la programmation à grande échelle : en raison de sa simplicité, sa compilation serait de 80 % à 90 % plus rapide que la compilation classique du C, et il est donc concevable de l'utiliser aussi bien pour écrire des applications, des scripts ou de grands systèmes. Cette simplicité est nécessaire aussi pour assurer la maintenance et l'évolution des programmes sur plusieurs générations de développeurs.

Wikipedia

Conclusion

J'ai adopté ce langage qui offre de belles perspectives.

Le langage Go (et son écosystème) est partie pour durer et se répandre au fil du temps dans les entreprises. En général l'adoption de technologies innovantes (dans le dev) est plutôt lentes dans les entreprises Françaises. Il reste encore énormément de structures obsolètes, implosant régulièrement au moindre stress.

Petite pensée pour l'ES6/7, Node.js, React.js, GIT, Nginx, NoSQL, Linux, Docker, ... qui ont mis du temps à remplacer les stacks vieillissantes et moins adaptés aux contextes actuels. Il en reste beaucoup qui roule en casserole, laissant de belles places aux jeunes poussent éveillées mieux équipées pour affronter leurs marchés.

L'adoption du Go sera rapide dans les entreprises modernes, au vue du contexte :

  • Nombreuses ressources disponibles (packages, docs, conférences, ...).
  • Promu par des leaders important (Google, Facebook, Netflix, Twitter, Paypal, OVH, Docker, ...)
  • Gain de temps (donc d'argent et de possibilités).
  • Excellente performance (proche du C).
  • Maintenabilité et productivité supérieures aux alternatives directes.
  • Peut-être aussi grâce à la culture d'entreprise qui tend à adapter plus rapidement ses stratégies pour suivre (dépasser !) la concurrence, ainsi que pour profiter au plus vite des solutions indissociables d'un futur proche.