(source : medium.com / made by : Simplify Complexity)
Cet article vous demandera environ 20 minutes pour sa lecture complète.
Nous y dépeindrons le langage de programmation GO en commençant par les raisons de sa création, son utilité et pourquoi vous devez commencer à vous en servir.
Vous êtes prêt ? Alors Let's GO !
Introduction
GO aussi appelé Golang est un langage de programmation open source, compilé et typé développé par Google. On doit sa création à Rob Pike, KenThompson et Robert Griesemer qui publièrent la première version le 10 novembre 2009.
Mais pourquoi avoir créé ce langage, quelles étaient les motivations de ses créateurs ?
La naissance de GO
Golang a été pensé de manière à faire face à deux grandes lois qui régissent l’évolution de la puissance de nos machines.
La première est la loi de Moore, cette loi énoncée par Gordon Moore en 1965 prédit que le nombre de transistors sur nos circuits intégrés doublera chaque année. 10 ans plus tard, il l'ajusta à deux ans au lieu d’un. Cette deuxième prédiction fut vérifiée jusqu’à 2012.
Plusieurs entreprises ont anticipé le ralentissement de cette règle et ont donc réfléchi à comment pallier ce problème, c’est alors que le processeur multi-core est né et depuis le nombre de core ne fait qu’augmenter.
C’est ainsi que la seconde loi prit le relais, la loi d’Amdhal décrite par l’informaticien Gene Amdhal en 1967. Elle prédit l'accélération théorique lors de l'utilisation de plusieurs processeurs.
Dans des termes plus simples, le temps d’exécution pourra être réduit si les programmes peuvent paralléliser au maximum leurs tâches (en utilisant tous les cores des processeurs).
C’est donc avec ces problématiques en tête et l’arrivée du cloud computing que Rob Pike, Ken Thompson et Robert Griesemer ont travaillé ensemble pour développer un langage moderne avec beaucoup d’avantages
Les avantages
I. Apprentissage et intelligibilités
Pourquoi ai-je qualifié GO d’ennuyeux ?
Et bien contrairement à une regex incompréhensible qui récompense votre cerveau avec de la dopamine lorsque vous la décryptez, le langage GO est clair, lisible et facilement intelligible, donc ennuyeux.
GO est proche du C, mais il possède des avantages supplémentaires comme un ramasse-miettes (garbage collector), du typage structurel et de la concurrence de type CSP (Communicating Sequential Processes)
II. Performance
1. Concurrence CSP
La majorité des langages que l’on connaît (Java, C#, Python, etc.) implémente le multithreading pour faire face aux deux lois évoquées précédemment. Mais cela leur cause des ralentissements.
Une attention particulière a donc été accordée au soutien de la concurrence, en développant des «goroutines» par opposition aux threads. Ces «goroutines» sont des fonctions qui s'exécutent en même temps que d'autres fonctions, elles peuvent être considérées comme des threads légers.
Au lieu de verrouiller les variables pour se partager la mémoire, les «goroutines» se communiquent entre elles la valeur des variables.
Leur coût de création est infime comparé à celui d'un thread. Il est donc courant que des milliers de «goroutines» soient exécutées simultanément dans une application.
2. Compilation
GO est compilé en langage machine, ce qui le rendra naturellement plus performant que les langages interprétés.
Non seulement l’exécutable qui en résulte est compilé très rapidement, mais le binaire finit par être étonnamment petit.
Par exemple le temps de compilation des 1,8 millions de lignes de code pour le projet Kubernetes v1.20.2 peuvent être compilés en 45 secondes avec un MacBook Pro de 2019 ayant un intel core i9 avec 8 core cadencés à 2,4Ghz et 32Go de RAM.
III. Cross-platform
Le langage permet la compilation pour différents langages machines et architectures de processeur (amd64, arm, etc.). De ce fait, les programmes GO peuvent être exécutés sous les environnements Linux, Mac OS, Windows, Android même Web avec l’utilisation de Web Assembly.
IV. Stabilité linguistique
Il a été défini par le projet Golang que toute application codée en version 1 reste compatible, c’est-à-dire qu’une application codée en GO 1.0.0 peut être compilée en GO 1.18.2 sans soucis.
Ceci représente un réel avantage car bon nombre de langages empêche la rétro-compatibilité après une montée de version.
Les inconvénients
I. Jeunesse
Avec maintenant un peu plus de 12 ans d’existence, le langage n’a pas forcément la maturité et l’expérience que beaucoup d’autres langages plus anciens possèdent.
La bibliothèque native de Golang est intelligemment conçue et efficace, mais elle est en concurrence avec des langages comme Java qui sont soutenus par une énorme collection de code intégré maintenu et amélioré par une communauté enthousiaste et engagée.
II. Gestion des erreurs
Dans GO, les erreurs sont tout simplement des valeurs. De ce fait, beaucoup de fonctions finissent par renvoyer une erreur.
Cela peut causer des problèmes lorsque la source de l’erreur est perdue, ce qui entraîne une absence de logique utile pour déboguer.
III. Sécurité d’exécution
Par rapport à de nombreux langages de programmation, Golang est relativement sûr, mais il est loin d’offrir le niveau de sécurité qu’offrent des langages comme Rust.
Cependant, cette faiblesse n’existe que lors de la compilation et, dans une certaine mesure, de l’exécution.
IV. Pas de bibliothèque graphique
Golang ne dispose malheureusement pas de bibliothèque d’interface graphique, ce qui signifie que l’on doit connecter une bibliothèque au lieu d’utiliser des solutions natives disponibles dans des langages tels que Python ou Java.
Intérêts d'apprendre GO
Popularité et emploi
Pourquoi apprendre à développer en GO et qu’est-ce qu’on peut développer avec ?
Actuellement, le GO est en pleine expansion sur le marché du travail. Différentes entreprise de toute taille recherchent des développeurs qui affectionnent ce langage.
On peut remarquer cette expansion avec les tableaux de popularité des langages ci-dessous :
Index TIOBE (https://www.tiobe.com/tiobe-index/)
Popularité des langages sur GitHub (https://madnight.github.io/githut/)
Utilisation
GO est de par nature multiplatform, il peut donc être utilisé pour une multitude de choses.
Nous verrons ci-dessous 3 différentes utilisations de celui-ci.
Développement d’outils pour le Cloud
Le logiciel Docker est une technologie de conteneurisation qui permet la création et l’utilisation de conteneurs.
Il est très vite devenu la référence après sa sortie en 2013.
Développement d’outils CLI
Terraform est un outil logiciel open source d'infrastructure en tant que code (IaaS) créé par HashiCorp. Les utilisateurs définissent et fournissent l'infrastructure à l'aide d'un langage de configuration déclaratif spécifique à la société (HashiCorp), ou en option, JSON
Développement de jeux vidéo
https://ebiten.org/
Cette librairie externe permet de développer des petits jeux vidéo cross-platform en Go.
En suivant le lien, vous pourrez trouver des exemples comme 2048, Flappy Bird, etc.
Exemple de projets
GO étant créé avec les problématiques du cloud computing en tête, ce dernier est donc l’un des plus utilisé pour développer ces outils. En voici une liste non exhaustive :
Kubernetes est un système open source qui vise à orchestrer l’automatisation et la montée en charge de conteneurs d'application sur des clusters de serveurs ».
Consul est un service mesh, il permet de découvrir et sécurisé des services au sein d’un cloud. Il est souvent utilisé dans les architectures micro-services.
Prometheus est un outil open source permettant de tracer et stocker des mesures sous forme de données chronologiques pour mieux comprendre les différentes interactions de notre architecture cloud.
CockroachDB est une base de données relationnelle SQL horizontalement scalable qui incorpore un mode de réparation automatique la rendant résiliente.
Traefik est un routeur Edge open source. Il reçoit les demandes provenant des utilisateurs ou de vos services et les redirige aux responsables de leur traitement.
À savoir qu’il peut communiquer avec le daemon Docker pour automatiser l’accès à vos services.
Comment bien démarrer ?
Vos premiers programmes en GO
HelloWorld !
Pour votre premier programme, vous devrez tout d’abord installer GO pour ce faire, rendez-vous sur cette url : https://go.dev/dl/
Une fois installer, vous pouvez créer un dossier nommé « helloworld »
Dans ce dernier, créez un fichier « main.go » ayant comme contenu les lignes suivantes :
Pour l’exécuter, démarrez un terminal dans le dossier créé précédemment nommé « helloworld » et tapez « go run main.go »
Voilà ! Vous venez de faire votre premier programme en GO, simple non !?
Peut-être trop simple pour vous alors voyons comment on fait une API !
Une API HelloWorld !
Comment allons-nous faire pour développer notre API ?
Devons-nous importer une librairie externe pour pouvoir en développer une
facilement ?
La réponse est oui et non, cela va dépendre de vos besoins, si vous souhaitez développer une grosse API résiliente, il est préférable d’utiliser des dépendances externes comme celles-ci dessous :
- Revel
- Gin
- Gorilla
- Et bien d’autres…
Mais vous allez voir que développer une API est extrêmement simple même
sans utiliser une librairie externe !
Commençons par créer un dossier nommé « myAPI »
Dans ce dernier, créez un fichier « main.go » ayant comme contenu les lignes suivantes :
Voilà ! En seulement quelques lignes de code intelligible vous venez de faire une API qui renvoie « HelloWorld !! » au format JSON.
Comment faire plus simple ?
Vous remarquerez que j’ai mis des commentaires mais même sans, vous auriez compris au moins dans les grandes lignes ce que fait chaque bloc.
Vous êtes convaincu et voulez en découvrir plus sur les librairies, logiciels en GO ?
Vous pouvez vous rendre sur les liens suivants :
Bibliographie
Livres
Cloud Native GO. (2021). Building Reliable Services In Unreliable Environments. (1er éd). O’Reilly
Concurrency in GO. (2017). Tools & Techniques For Developers. (1er éd). O’Reilly
Learning GO. (2021). An Idiomatic Approach to Real-World Go Programming. (1er éd). O’Reilly
Sites
Wikipédia :