GoSuda

Pourquoi le langage Go ?

By Rabbit Princess
views ...

Introduction

Un langage de programmation est un outil pour créer des produits. Le simple fait d'utiliser un certain langage ne détermine pas les compétences d'un développeur. Cependant, le choix du langage et la manière dont il est maîtrisé peuvent avoir un impact direct sur la façon de penser et l'orientation de la croissance du développeur. En particulier, comparer le langage actuellement utilisé à d'autres langages est très utile pour élargir la perspective technique et développer une compréhension de l'essence. Dans cet article, j'aimerais expliquer pourquoi j'ai choisi Go et comment cela aide au développement du développeur, en le divisant en cinq aspects.

1. Go est un langage qui équilibre performance et productivité.

Il existe de nombreux langages de programmation dans le monde, et chaque langage a ses avantages et ses inconvénients en fonction de ses caractéristiques.

  • C offre d'excellentes performances et un contrôle de bas niveau, mais la gestion de la mémoire doit être effectuée directement par le développeur, et il manque de fonctionnalités de haut niveau, ce qui réduit la productivité et rend la maintenance difficile.
  • C++ et Rust prennent en charge diverses fonctionnalités avancées telles que l'orienté objet, les templates et la métaprogrammation, mais leur syntaxe est complexe, leur courbe d'apprentissage est abrupte et leurs vitesses de compilation lentes ne conviennent pas aux déploiements itératifs.
  • Java et C# sont largement utilisés pour les services à grande échelle en raison de leur indépendance de la plateforme et de leur stabilité, mais ils s'exécutent sur des machines virtuelles lourdes, ce qui rend les environnements de déploiement et d'exécution complexes et les exigences en ressources élevées.
  • Python et Javascript sont adaptés au développement rapide grâce à leur syntaxe concise et à leur écosystème riche, mais leurs performances d'exécution sont faibles et la fiabilité de l'écosystème est faible, ce qui révèle des limitations structurelles dans les systèmes à grande échelle.

En revanche, Golang est un langage qui présente un excellent équilibre entre performance et productivité. Go est un langage compilé comme C, il garantit donc des performances d'exécution élevées tout en offrant une flexibilité de déploiement de niveau interpréteur grâce à sa vitesse de compilation rapide. En d'autres termes, Go est un langage équilibré qui peut être utilisé de manière stable dans la plupart des environnements sans inconvénients majeurs.

2. Go empêche la programmation cargo cult.

Pendant la Seconde Guerre mondiale, les forces alliées ont construit des bases aériennes sur les îles du Pacifique pour soutenir l'effort de guerre. L'afflux de fournitures et d'équipements militaires a considérablement modifié la vie des soldats et des indigènes. Les habitants ont vu pour la première fois des avions transporter des vêtements manufacturés, des aliments en conserve et d'autres articles. Une fois la guerre terminée, les bases ont été abandonnées et les cargaisons n'arrivaient plus. Les insulaires, pour imiter les soldats, se sont donc habillés comme des contrôleurs aériens, des soldats et des marins, ont construit des pistes d'atterrissage rudimentaires et ont utilisé des bâtons pour signaler aux avions d'atterrir. Ils ont continué à défiler pour que les cargaisons soient larguées par parachute depuis les avions. Mais les avions qu'ils attendaient ne sont jamais venus.

La programmation cargo cult fait référence à l'habitude des développeurs d'imiter l'apparence du code ou de la technologie sans en comprendre les principes. Chez les développeurs modernes, en particulier dans le domaine du développement web, cette habitude de suivre sans comprendre le sens est courante. Grâce à des frameworks comme React, Next, Spring et Django, le développement est devenu possible sans connaître la structure interne, mais il est souvent difficile de gérer correctement la moindre erreur. Avec l'ajout récent des outils de génération de code AI, la méthode de développement consistant à copier-coller les résultats plutôt que d'écrire du code directement ou de comprendre les principes est devenue encore plus répandue.

Go évite fondamentalement ces problèmes au niveau de la philosophie du langage. Go est un langage conçu autour de la bibliothèque standard, et non autour des frameworks. Les développeurs peuvent construire un serveur web de niveau service réel avec seulement des bibliothèques de base comme net/http et database/sql, ce qui leur permet de développer naturellement une intuition et une compréhension des structures de bas niveau telles que le réseau, les bases de données et les I/O. Cette structure, qui permet d'acquérir des bases solides sans dépendre de frameworks, constitue une base pour que les développeurs puissent croître continuellement sans perdre de vue l'essence de la technologie.

3. Go offre un modèle de concurrence puissant.

Les CPU modernes évoluent vers l'amélioration des performances en utilisant plusieurs cœurs en parallèle plutôt qu'en augmentant la vitesse d'un seul cœur. En conséquence, la concurrence, qui permet à un programme de gérer plusieurs tâches simultanément, est devenue essentielle, et l'importance des langages capables de la concevoir et de l'implémenter efficacement ne cesse de croître. Go est un langage optimisé pour cet environnement. Une goroutine est un thread léger fourni par Go, qui peut être créé avec seulement quelques KB de pile, et consomme très peu de ressources système même lorsque des milliers d'entre elles s'exécutent simultanément. Le runtime de Go distribue efficacement un grand nombre de goroutines aux threads du système d'exploitation via son propre ordonnanceur M:N, et ce processus est automatiquement optimisé sans intervention directe du développeur. Cela permet aux développeurs de concevoir une logique de concurrence de manière sûre et cohérente, sans logique de synchronisation complexe ni planification personnalisée.

De plus, Go prend en charge activement la conception de la concurrence moderne en utilisant des outils de synchronisation tels que mutex et waitGroup, ainsi que channel et context. Grâce à cette structure, les développeurs peuvent acquérir naturellement un sens pratique de la concurrence et du parallélisme sans être liés par des théories complexes, et atteindre un niveau élevé d'abstraction et de capacité de conception utilisable à partir de zéro.

4. Go est un langage créé par d'excellents développeurs qui ont su garder le cap.

Go est un langage né sous l'impulsion de Google et de développeurs légendaires tels que Robert Griesemer, Rob Pike et Ken Thompson. En particulier, ce sont les créateurs d'Unix et du langage C, ainsi que des maîtres dans les domaines des compilateurs et des logiciels système, ce qui prouve à lui seul la fiabilité technique de Go. Avec l'expérience pratique et le savoir-faire en matière d'exploitation de services à grande échelle de nombreux ingénieurs de Google, Go a été développé dès le début dans le but de résoudre des problèmes réels, en suivant une philosophie et une direction cohérentes.

D'autres langages causent souvent de la confusion dans les communautés et chez les utilisateurs en raison de ruptures de compatibilité, de changements de conception, de licences instables ou d'écosystèmes non standardisés. Par exemple, Python a vu son écosystème divisé pendant des années en raison de la rupture de compatibilité entre les versions 2 et 3, et Java a connu une augmentation des cas où les entreprises hésitent à l'adopter en raison de l'instabilité de sa politique de licence après l'acquisition par Oracle. De plus, Node.js ne parvient toujours pas à fournir un système de modules cohérent avec la coexistence de CJS et d'ESM.

En revanche, Go est un langage qui privilégie la cohérence et la stabilité. L'équipe Go maintient strictement la compatibilité descendante et, lors de l'introduction de nouvelles fonctionnalités, elle adhère à une approche d'intégration progressive afin d'éviter les conflits avec le code existant. La syntaxe évite également les mots-clés inutiles et limite l'abstraction excessive, empêchant ainsi le langage de devenir inutilement complexe. De plus, la chaîne d'outils officielle cohérente, telle que go fmt, go mod, go build et go test, incite tous les projets Go à avoir le même environnement de développement et la même structure, et la bibliothèque standard puissante et pratique prend en charge fidèlement la plupart des fonctionnalités nécessaires au développement réel, telles que le serveur web, le traitement de fichiers et l'intégration de bases de données, sans nécessiter de framework distinct.

5. Le Gopher est mignon.

Gopher1

Gopher2

Gopher3