Le langage de programmation Go a été conçu dans un souci de simplicité, mais cela ne signifie pas qu’il est limité dans ce qu’il peut faire. Les ingénieurs des opérations informatiques utilisent Go pour faire tourner automatiquement les conteneurs, configurer les réseaux, provisionner le stockage et accomplir d’autres tâches.
La conteneurisation Docker a été écrite en Go, tout comme l’outil d’orchestration de conteneurs Kubernetes. Go, qui a été développé à l’origine chez Google, est utilisé par l’entreprise dans divers systèmes, tels que Google App Engine qui fournit une abstraction d’infrastructure pour Google Cloud et la méthode Vitess pour fragmenter MySQL afin de le mettre à l’échelle.
Go a été écrit par Robert Griesemer, Rob Pike et Ken Thompson de Google. Les antécédents de Pike et Thompson incluent la construction du système d’exploitation Unix original aux Bell Labs dans les années 1970.
Go, également appelé golang, présente des similitudes et des différences avec d’autres langages de programmation pour l’infrastructure, ainsi que certaines limitations à comprendre avant d’entreprendre un projet golang. Suivez le didacticiel simple sur le langage de programmation Go ici pour avoir une idée de son fonctionnement.
Pourquoi utiliser Go ?
Google a développé Go en partie pour faciliter le déploiement du code écrit par ses grandes équipes de projet, selon Pike. Une option consiste à raccourcir le code. Par exemple, un programmeur en langage C doit mettre des directives de précompilateur, telles que #ifdef pour si défini, dans le code pour lui dire quels modules insérer au moment de la compilation. Cette approche peut devenir désordonnée et interminable. Go, comme Python, repose sur un simple importer directive, qui dit à chaque programme d’extraire ce dont il a besoin.
Avant Go, la construction du logiciel de Google prenait 45 minutes et un important réseau de serveurs. Maintenant, cela prend 27 minutes. “Le mythe d’origine de Go stipule que c’est au cours de l’une de ces constructions de 45 minutes que Go a été conçu”, a déclaré Pike.
Go est lié de manière statique au lieu d’être lié de manière dynamique, de sorte que les programmes Go sont faciles à porter. Toutes les bibliothèques d’objets partagés, qui se terminent par .so, dont un programme a besoin sont placées dans le programme Go compilé au lieu d’être appelées au moment de l’exécution. En termes Java, cela s’appelle un fat JAR. Un tel code devrait fonctionner sur des systèmes qui n’ont pas encore ces dépendances en place et sur des systèmes où les objets sont des versions incompatibles.
Le portage est un problème avec d’autres langages de programmation, y compris Python. Les organisations Python souhaitent conserver la version 2.7 en place et prendre en charge simultanément la version 3, ce qui entraîne divers problèmes chaque fois que les développeurs confondent les packages Python. Go est un langage de programmation compilé, qui s’exécute plus rapidement que les langages interprétés, tels que Python. Go compile beaucoup plus vite que C. Et Go est plus court et plus succinct que Java, qui nécessite également des fichiers de configuration Apache Maven et Ant complexes pour créer le JAR.
Fonctionnalités Go avancées
Bien que Go ait une syntaxe relativement simple, il prend en charge des fonctionnalités de langage avancées, telles que la concurrence et la programmation fonctionnelle.
La programmation fonctionnelle, comme le savent les programmeurs Scala et Haskell, permet un fonctionnement immuable. Avec la programmation fonctionnelle, tout est une fonction et il n’y a pas de variables globales, donc un programmeur ne peut pas changer les variables globales dans le code et le gâcher pour les autres programmeurs. Le comportement du programme dépend des valeurs qui lui sont transmises. La programmation fonctionnelle n’est qu’un style, pas une exigence pour écrire du code Go.
La simultanéité, lorsqu’un programme crée un autre thread, est une autre fonctionnalité Go compliquée à implémenter dans d’autres langages. Il existe un risque qu’un thread puisse modifier une valeur de variable qu’un autre thread utilise également. Des langages tels que Java et Python exigent que le programmeur écrive spécifiquement du code pour démarrer, arrêter et attendre qu’un processus s’exécute. Go protège les variables partagées contre l’écrasement et, pire, contre le blocage des threads.
Le langage de programmation Go peut transmettre des variables par référence ou par valeur, ce qui est également une fonctionnalité de C. Par exemple, le code Go peut utiliser une adresse mémoire, ou un pointeur, pour mettre à jour une variable sans en faire une seconde copie. En C, cette configuration peut provoquer des erreurs dangereuses et imprévisibles – ainsi qu’une surface d’attaque pour les pirates – mais la gestion de la mémoire Go est gérée de la même manière qu’avec Java : elle crée et détruit des objets en mémoire lorsqu’ils entrent et sortent de portée.
Un tutoriel de programmation d’infrastructure Go
Il existe de nombreuses API pour Go pour la programmation d’infrastructure pour Docker, AWS, OpenStack, SaltStack et une pléthore d’autres. Via la programmation Go, les ingénieurs d’infrastructure, les développeurs d’infrastructure, les ingénieurs de fiabilité du site et les professionnels de l’informatique de même titre orchestrent les déploiements de machines virtuelles et de conteneurs, créent des réseaux, provisionnent les utilisateurs et le stockage, et accomplissent d’autres tâches.
Par exemple, avec Go et le kit de développement logiciel (SDK) d’Amazon, un programmeur peut écrire du code pour travailler avec des produits AWS allant de la surveillance et des audits de conformité CloudTrail à Simple Storage Service (S3) et à l’infrastructure Elastic Compute Cloud, ainsi que DynamoDB. Service de base de données NoSQL et même traitement piloté par les événements Lamda sans serveur.
Avec Amazon, le point de départ est un session. Une session comprend, par exemple, une région Amazon. Un programmeur Go crée un client Amazon S3 comme ceci :
sess, err := session.NewSessionWithOptions(session.Options{})
s3.Nouveau(ses)
Go utilise les importations pour savoir où obtenir le SDK Amazon :
importer (
“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/s3”
“fmt”
“os”
)
L’utilisateur peut ensuite créer un compartiment S3, tel que svc.CreateBucket(). Un compartiment Amazon S3 est comme un dossier de fichiers.
Limitations du langage de programmation Go
Go ne prend pas en charge les types génériques. Un programmeur ne peut pas, par exemple, déclarer une fonction en utilisant le N’IMPORTE QUEL type, comme ils le peuvent avec Scala. Les types génériques permettent à une fonction de gérer n’importe quel type de paramètre. Mais avec Go, le programmeur doit écrire une fonction pour chaque type. Par exemple, faire quelque chose (je int32) fonctionne avec des entiers 32 bits, mais pas avec des entiers 64 bits, qui nécessitent fairequelquechose64(i int64). Google aborde ce problème et d’autres dans sa FAQ sur Go.
Go ne prend pas en charge la surcharge, qui est couramment utilisée pour des tâches telles que tester si deux objets sont égaux. Par exemple, le programmeur peut surcharger = (égal) pour tester si deux objets sont égaux. Ce n’est pas possible avec Go.
La poursuite de Go en tant que langage de programmation est la simplicité. C’est au programmeur de décider si cet objectif se fait au détriment de la richesse des fonctionnalités, ou s’il s’agit d’un moyen d’éviter les peluches ésotériques et difficiles à comprendre.