golang n'est pas chinois. Golang est un langage de programmation concurrent, compilé et statiquement fortement typé, doté de capacités de récupération de place développées par Google. Golang est une autre tentative de conception de langage de programmation et une amélioration majeure des langages de type C. Il vous permet non seulement d'accéder au système d'exploitation sous-jacent, mais fournit également une programmation réseau puissante et une prise en charge de la programmation simultanée. Le langage Go a de nombreuses utilisations et peut être utilisé pour la programmation réseau, la programmation système, la programmation simultanée et la programmation distribuée.
L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.
golang n'est pas chinois.
Golang (également connu sous le nom de langage Go ou Go) est un langage de programmation concurrent, compilé et statiquement fortement typé avec des capacités de garbage collection développées par Robert Griesemer, Rob Pike et Ken Thompson de Google.
Le langage Go (ou Golang) est né en 2007 et a été officiellement publié en 2009. Go est un langage très jeune, et son objectif principal est de « combiner la vitesse de développement de langages dynamiques comme Python et les performances et la sécurité des langages compilés comme C/C++ ».
Le langage Go est une autre tentative de conception de langage de programmation et une amélioration majeure par rapport aux langages de type C. Il vous permet non seulement d'accéder au système d'exploitation sous-jacent, mais fournit également une programmation réseau puissante et une prise en charge de la programmation simultanée. Le langage Go a de nombreuses utilisations et peut être utilisé pour la programmation réseau, la programmation système, la programmation simultanée et la programmation distribuée.
Le lancement du langage Go vise à réduire la complexité du code sans perdre les performances des applications. Il présente les avantages d'un « déploiement simple, d'une bonne concurrence, d'une bonne conception du langage et de bonnes performances d'exécution ». Actuellement, de nombreuses entreprises informatiques nationales l'utilisent. Allez langage pour développer des projets.
Le langage Go est parfois décrit comme un « langage de type C », ou « le langage C du 21e siècle ». Go hérite d'une syntaxe d'expression, d'une structure de flux de contrôle, de types de données de base, d'un transfert de valeur de paramètre d'appel, de pointeurs et de nombreuses autres idées similaires du langage C. Il possède également l'efficacité de fonctionnement du code machine compilé que le langage C a toujours apprécié et est cohérent avec Seamless existant. adaptation au système d'exploitation.
Parce que le langage Go n'a pas les concepts de classes et d'héritage, il ne ressemble pas à Java ou C++. Mais il réalise le polymorphisme grâce au concept d'interface. Le langage Go possède un système de types léger clair et facile à comprendre, et il n'y a pas de hiérarchie entre les types. On peut donc dire que le langage Go est un langage hybride.
De plus, de nombreux projets open source importants sont développés à l'aide du langage Go, notamment Docker, Go-Ethereum, Thrraform et Kubernetes.
Pourquoi devriez-vous apprendre le langage Go
Si vous souhaitez créer des programmes système ou des programmes basés sur un réseau, le langage Go est un très bon choix. En tant que langage relativement nouveau, il a été conçu par des informaticiens expérimentés et respectés pour relever les défis liés à la création de programmes réseau simultanés à grande échelle.
Avant l'émergence du langage Go, les développeurs étaient toujours confrontés à un choix très difficile : utiliser un langage (tel que C++) qui a une vitesse d'exécution rapide mais pas une vitesse de compilation idéale, ou utiliser un langage qui a une compilation rapide. vitesse mais mauvaise efficacité d'exécution Des langages (tels que : .NET, Java), ou des langages dynamiques moins difficiles à développer mais ayant une vitesse d'exécution moyenne ? De toute évidence, le langage Go atteint le meilleur équilibre entre ces trois conditions : compilation rapide, exécution efficace et développement facile.
Le langage Go prend en charge la compilation croisée. Par exemple, vous pouvez développer des applications pouvant s'exécuter sous Windows sur un ordinateur exécutant un système Linux. Il s'agit du premier langage de programmation à prendre entièrement en charge UTF-8. Cela se reflète non seulement dans le fait qu'il peut gérer les chaînes codées en UTF-8, mais également dans son format de fichier de code source qui utilise le codage UTF-8. Allez, la langue est vraiment internationale !
Caractéristiques du langage Go
Syntaxe simple
Mis à part le style de syntaxe, en termes de types et de règles uniquement, Go présente de nombreuses similitudes avec C99 et C11, c'est pourquoi le langage Go est surnommé Raisons importantes pour le nom "NextC".
La grammaire du langage Go se situe aux deux extrêmes de la simplicité et de la complexité. Le langage C est si simple que chaque fois que vous écrivez une ligne de code, vous pouvez imaginer à quoi elle ressemblera après la compilation, comment les instructions sont exécutées, comment la mémoire est allouée, etc. La complexité du C réside dans le fait qu’il contient trop de règles obscures et non pertinentes, ce qui est vraiment un casse-tête. En comparaison, Go part de zéro et n’a aucun bagage historique. Après avoir appris de nombreuses expériences et leçons, il peut planifier un monde avec des règles strictes et une organisation simple à partir de zéro.
Les règles grammaticales de la langue Go sont strictes, il n'y a pas d'ambiguïté et il n'y a pas de variations de magie noire. Le code écrit par n’importe qui est fondamentalement le même, ce qui rend le langage Go facile à apprendre. Je pense que cela vaut la peine de renoncer à une partie de la « flexibilité » et de la « liberté » en échange d'une meilleure maintenabilité.
Rétrogradez "++" et "--" des opérateurs en instructions, conservez les pointeurs, mais empêchez les opérations de pointeur par défaut, et les avantages sont évidents. De plus, utiliser des tranches et des dictionnaires comme types intégrés et les optimiser dès le niveau d'exécution est également considéré comme « simple ».
Modèle de concurrence
Aujourd'hui, la programmation simultanée est devenue une compétence de base pour les programmeurs, et de nombreux sujets de discussion connexes peuvent être consultés dans diverses communautés techniques. Dans ce cas, le langage Go a fait quelque chose de très audacieux, inhabituel et fondamentalement rendu tout simultané. Il utilise Goroutine pour tout exécuter pendant l'exécution, y compris la fonction d'entrée main.main.
On peut dire que Goroutine est la fonctionnalité la plus importante de Go. Il utilise une approche de type coroutine pour gérer les unités concurrentes, mais effectue également une optimisation plus approfondie au niveau de l'exécution. Cela rend la programmation syntaxiquement concurrente extrêmement simple. Il n'est pas nécessaire de gérer les rappels, pas besoin de prêter attention au changement de thread, un seul mot-clé, simple et naturel.
Utilisez le canal pour implémenter le modèle CSP. Découpler le couplage de données entre unités concurrentes et permettre à chacune d'accomplir ses propres tâches est un soulagement bienvenu pour tous les développeurs aux prises avec le partage de mémoire et la granularité des verrouillages. S'il y a des lacunes, c'est qu'il devrait y avoir un plan plus large pour étendre la communication de l'intérieur du processus vers l'extérieur du processus afin de parvenir à une véritable distribution.
Allocation de mémoire
La concurrence est une bonne chose, mais elle pose également de nombreux problèmes. Comment réaliser l’allocation et la gestion de la mémoire dans des conditions de concurrence élevée est un problème difficile. Heureusement, Go a choisi tcmalloc, un composant d'allocation de mémoire hautes performances conçu pour la concurrence.
On peut dire que l'allocateur de mémoire est la partie qui change le moins parmi les trois composants majeurs du runtime. À l'exclusion du contenu modifié pour coopérer avec le garbage collector, l'allocateur de mémoire conserve complètement la structure originale de tcmalloc. Utilisez le cache pour fournir une allocation sans verrouillage pour le thread d'exécution actuel et plusieurs centrales pour équilibrer la réutilisation des unités de mémoire entre les différents threads. À un niveau supérieur, le tas gère de gros blocs de mémoire et les divise en différents niveaux de blocs de mémoire réutilisés. L'allocation rapide et le mécanisme d'équilibrage de la mémoire secondaire permettent à l'allocateur de mémoire d'accomplir de manière excellente les tâches de gestion de la mémoire sous haute pression.
Dans les versions récentes, l'optimisation du compilateur a été très efficace. Il fera de son mieux pour allouer les objets sur la pile afin de réduire la pression du garbage collection, de réduire la consommation de gestion et d'améliorer les performances d'exécution. On peut dire qu'à l'exception de problèmes de performances occasionnels qui obligent à utiliser des pools d'objets et une gestion autonome de la mémoire, nous n'avons fondamentalement pas besoin de participer aux opérations de gestion de la mémoire.
Collecte des ordures
La collecte des ordures a toujours été un problème. Dans les premières années, Java a longtemps été ridiculisé en raison de son inefficacité de collecte des déchets. Plus tard, Sun a progressivement incorporé de nombreuses personnes et technologies pour le développer jusqu'à aujourd'hui. Mais même ainsi, dans les scénarios d’applications à grande mémoire tels que Hadoop, le garbage collection reste étendu et difficile.
Par rapport à Java, Go fait face à plus de difficultés. En raison de l’existence de pointeurs, la mémoire récupérée ne peut pas être réduite. Heureusement, l'arithmétique des pointeurs est bloquée, sinon il serait difficile d'obtenir un recyclage précis.
Chaque fois que vous effectuez une mise à niveau, le garbage collector doit être la partie la plus modifiée du composant principal. Du nettoyage simultané à la réduction du temps STW, jusqu'à ce que la version 1.5 de Go implémente le marquage simultané et introduise progressivement le marquage tricolore et les barrières d'écriture, etc., tout cela vise à améliorer le fonctionnement du garbage collection sans affecter la logique utilisateur. Malgré les efforts, la version actuelle de l'algorithme de récupération de place ne peut être considérée que comme utilisable, et il reste encore un long chemin à parcourir avant d'être utile.
Liens statiques
Lors de la première sortie de Go, les liens statiques étaient présentés comme des avantages. Un simple fichier exécutable compilé peut être déployé sans rien joindre. Cela semblait être une bonne idée, mais la tendance a ensuite changé. Depuis plusieurs versions consécutives, le compilateur améliore la fonction buildmode de la bibliothèque dynamique, et la situation est devenue un peu embarrassante depuis un moment.
Laissez de côté le mode buildmode inachevé pour l'instant, les avantages de la compilation statique sont évidents. Le runtime et les bibliothèques dépendantes sont directement regroupés dans le fichier exécutable, ce qui simplifie les opérations de déploiement et de publication. Il n'est pas nécessaire d'installer l'environnement d'exploitation et de télécharger de nombreuses bibliothèques tierces à l'avance. Cette approche simple est très utile pour l'écriture de logiciels système, car les dépendances aux bibliothèques ont toujours été un problème.
Bibliothèque standard
La bibliothèque standard avec des fonctions complètes et une qualité fiable fournit une puissance suffisante pour les langages de programmation. La plupart des développements de fonctions de base peuvent être réalisés sans l'aide d'extensions tierces, ce qui réduit considérablement les coûts d'apprentissage et d'utilisation. Le plus important est que la bibliothèque standard est garantie d'être mise à niveau et réparée, et qu'elle peut également bénéficier de la commodité d'une optimisation approfondie à partir du runtime, qui n'est pas disponible dans les bibliothèques tierces.
Bien que la bibliothèque standard Go ne soit pas entièrement couverte, elle reste extrêmement riche. L'un des plus louables est net/http, qui permet d'implémenter un serveur Web hautes performances avec seulement quelques instructions simples. Cela a toujours été un point fort de la publicité. De plus, un grand nombre d'excellents frameworks tiers basés sur celui-ci ont poussé Go au rang de standard de développement Web/Microservice.
Bien sûr, d'excellentes ressources tierces constituent également une partie importante de l'écosystème linguistique. Parmi les nombreux langages apparus ces dernières années, le Go est unique, avec un grand nombre d'excellents ouvrages qui émergent fréquemment, ce qui nous fournit également une bonne référence pour apprendre le Go.
Toolchain
Une chaîne d'outils complète est extrêmement importante pour le développement quotidien. Go a fait un très bon travail ici, avec les outils correspondants pour la compilation, le formatage, la vérification des erreurs, la documentation d'aide et les téléchargements et mises à jour de packages tiers. Ses fonctions ne sont peut-être pas parfaites, mais au moins il est simple et facile à utiliser.
Cadre de test complet intégré, comprenant les tests unitaires, les tests de performances, la couverture du code, la concurrence des données et le pprof pour le réglage. Ce sont des outils essentiels pour garantir que le code peut s'exécuter correctement et de manière stable.
De plus, les informations de surveillance de l'exécution peuvent également être générées via des variables d'environnement, en particulier le garbage collection et le suivi de la planification simultanée, ce qui peut nous aider davantage à améliorer l'algorithme et à obtenir de meilleures performances d'exécution.
【Recommandations associées : Tutoriel vidéo Go, Enseignement de la programmation】
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!