Maison > développement back-end > Golang > le corps du texte

Quelle est la fonctionnalité la plus importante du langage Go

青灯夜游
Libérer: 2022-12-16 19:04:11
original
5559 Les gens l'ont consulté

Les fonctionnalités les plus importantes du langage Go sont : 1. La programmation simultanée ; La programmation simultanée dans la syntaxe Go est 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. 2. Collecte automatique des déchets ; les programmeurs n'ont plus besoin de prendre en compte le recyclage de la mémoire, mais les fonctionnalités du langage fournissent un garbage collector pour récupérer la mémoire. 3. Types intégrés plus riches. 4. Plusieurs valeurs de retour des fonctions. 5. Gestion des erreurs. 6. Fonctions et fermetures anonymes. 7. Types et interfaces. 8. La réflexion permet aux développeurs de traiter le type lui-même comme un type valeur de première classe. 9. Interactivité linguistique.

Quelle est la fonctionnalité la plus importante du langage Go

L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3. Les fonctionnalités les plus importantes du langage Go sont les suivantes :

Erreur lors du traitement des

    fonctions et fermetures anonymes
  • types et interfaces
  • réflexion
  • interactivité linguistique
  • programmation concurrente

  • Aujourd'hui, la programmation concurrente est devenu un programme Les compétences de base des employés et de nombreux sujets de discussion connexes peuvent être vus 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.
  • Le langage Go est beaucoup plus simple que la plupart des langages​​en termes de programmation simultanée. C'est l'un de ses plus grands points forts et une monnaie d'échange importante pour lui permettre d'entrer dans des scénarios de haute concurrence et de hautes performances à l'avenir.

  • Différent du multi-processus ou multi-thread traditionnel, l'unité d'exécution simultanée de golang est une coroutine appelée goroutine.
  • Étant donné que les verrous sont utilisés dans des scénarios de données partagées, couplés au GC, ses performances de concurrence ne sont parfois pas aussi bonnes que le modèle IO de multiplexage asynchrone. Par conséquent, par rapport à la plupart des langages, la simplicité de programmation simultanée de Golang est plus un argument de vente que les performances de concurrence.

    À l’ère du multicœur d’aujourd’hui, l’importance de la programmation simultanée est évidente. Bien sûr, de nombreux langages prennent en charge la programmation multithread et multi-processus, mais malheureusement, sa mise en œuvre et son contrôle n'est pas si simple et agréable. La différence avec Golang est que le niveau de langage prend en charge la simultanéité des coroutines (goroutines) (les coroutines sont également appelées micro-threads, qui sont plus légères, moins coûteuses et plus performantes que les threads). Le niveau de langage fournit. mots-clés (go) Utilisés pour démarrer des coroutines, et des milliers de coroutines peuvent être démarrées sur la même machine. Les coroutines sont souvent considérées comme des threads légers. Un thread peut contenir plusieurs coroutines et le tas partagé ne partage pas la pile. Les coroutines sont généralement planifiées explicitement par l'application, et le changement de contexte n'a pas besoin de descendre jusqu'à la couche noyau, ce qui est beaucoup plus efficace. Il n'y a généralement pas de communication synchrone entre les coroutines, mais il existe deux types de communication entre les coroutines dans Golang : 1) le type de mémoire partagée, qui utilise des variables globales + des verrous mutex pour réaliser le partage de données 2) le type de transmission de messages, qui utilise un Some unique ; les mécanismes de canal effectuent une communication asynchrone.
En comparant le multi-threading de JAVA et l'implémentation de la coroutine de GO, c'est évidemment plus direct et simple. C'est le charme de GO, résoudre les problèmes de manière simple et efficace. Le mot-clé go est peut-être le symbole le plus important du langage GO.

La haute concurrence est le plus grand point fort du langage Golang

Recyclage de la mémoire (GC)

Du C au C++, du point de vue des performances des programmes, ces deux langages permettent aux programmeurs de gérer eux-mêmes la mémoire, y compris l'application et la libération de la mémoire, etc. Comme il n'existe pas de mécanisme de récupération de place, le C/C++ s'exécute très rapidement, mais il s'accompagne d'une attention particulière du programmeur à l'utilisation de la mémoire. Parce que même un peu de négligence peut conduire à des « fuites de mémoire » qui gaspillent des ressources ou à des « pointeurs sauvages » qui provoquent des plantages de programmes. Bien que C++11 ait utilisé plus tard le concept de pointeurs intelligents, les programmeurs doivent toujours l'utiliser avec beaucoup de prudence. Plus tard, afin d'améliorer la vitesse de développement du programme et la robustesse du programme, des langages de haut niveau tels que Java et C# ont introduit le mécanisme GC, c'est-à-dire que les programmeurs n'ont plus besoin de considérer le recyclage de la mémoire, mais le les fonctionnalités du langage fournissent un garbage collector pour recycler la mémoire. Mais ce qui s’ensuit pourrait être une diminution de l’efficacité du programme.

Le processus GC est le suivant : arrêtez d'abord le monde, analysez tous les objets pour déterminer s'ils sont vivants, marquez les objets recyclables dans une zone bitmap, puis démarrez immédiatement le monde, reprenez les services et en même temps démarrez une gorountine spéciale pour recycler la mémoire dans la liste libre. Prêt à être réutilisé et non physiquement libéré. La version physique est effectuée périodiquement par un thread dédié. Quelle est la fonctionnalité la plus importante du langage Go

Le goulot d'étranglement du GC est que tous les objets doivent être analysés à chaque fois pour déterminer leur vivacité. Plus il y a d'objets à collecter, plus la vitesse est lente. Une valeur empirique est qu'il faut 1 ms pour analyser 100 000 objets, essayez donc d'utiliser une solution avec moins d'objets, par exemple, nous considérons les listes chaînées, les cartes, les tranches et les tableaux pour le stockage en même temps. maps est un objet, et slice ou array est un objet, donc slice ou array est bon pour GC.

Les performances de GC peuvent être continuellement optimisées car la version est constamment mise à jour. Je n'ai pas étudié cela attentivement. Il y a des développeurs HotSpot dans l'équipe, ils devraient donc s'inspirer des idées de conception de jvm gc, telles que le recyclage générationnel, le point de sécurité, etc. .

  • La mémoire est automatiquement recyclée et les développeurs n'ont plus besoin de gérer la mémoire

  • Les développeurs se concentrent sur la mise en œuvre commerciale, réduisant ainsi la charge mentale

  • Uniquement une nouvelle allocation de mémoire, pas besoin de la libérer

Types intégrés plus riches

La clé réside dans l'intégration. Les types de données courants tels que la carte et la tranche sont intégrés et inclus par défaut.

Valeurs de retour de fonctions multiples

En C, C++, y compris certains autres langages de haut niveau, les valeurs de retour de fonctions multiples ne sont pas prises en charge. Mais cette fonction est effectivement nécessaire, donc en langage C, la valeur de retour est généralement définie comme une structure, ou renvoyée sous la forme d'une référence de paramètre de fonction. Dans le langage Go, en tant que nouveau langage, l'objectif est de le positionner comme un langage puissant et bien sûr ne peut pas renoncer à répondre à cette demande, il est donc nécessaire de prendre en charge plusieurs valeurs de retour​​des fonctions.

Lors de la définition de la fonction, vous pouvez ajouter (a, b, c) après les paramètres d'entrée, ce qui signifie qu'il y aura 3 valeurs de retour a, b, c. Cette fonctionnalité est disponible dans de nombreux langages, comme python.

Cette fonctionnalité de sucre syntaxique a une signification pratique. Par exemple, nous exigeons souvent que l'interface renvoie un triplet (errno, errmsg, data). Dans la plupart des langages qui n'autorisent qu'une seule valeur de retour, nous ne pouvons utiliser que le triplet Put it). dans une carte ou un tableau et le renvoyer. Le récepteur doit également écrire du code pour vérifier que la valeur de retour contient des triples. Si plusieurs valeurs de retour sont autorisées, elle sera forcée directement au niveau de la définition de la fonction pour rendre le code plus concis. et sûr.

Interactivité linguistique

L'interactivité linguistique fait référence à la question de savoir si ce langage peut interagir avec d'autres langages, par exemple en appelant des bibliothèques compilées dans d'autres langages.

La plupart des modules C sont directement réutilisés dans le langage Go, appelé ici Cgo permet aux développeurs de mélanger et d'écrire du code en langage C, puis l'outil Cgo peut extraire ces codes C mixtes et générer des packages d'appels pour le code des fonctions C. Les développeurs peuvent fondamentalement ignorer complètement la façon dont la frontière entre le langage Go et le langage C est franchie.

golang peut interagir avec les programmes C, mais pas avec C++. Il existe deux alternatives : 1) Compilez d'abord C++ dans une bibliothèque dynamique, puis appelez un morceau de code C depuis Go. Le code C appelle dynamiquement la bibliothèque dynamique via la bibliothèque dlfcn (n'oubliez pas d'exporter LD_LIBRARY_PATH 2) Utilisez swig (). je n'y ai jamais joué auparavant)

Gestion des exceptions

golang ne prend pas en charge les solutions d'exception structurées telles que try...catch, car on pense que cela augmentera la quantité de code et sera abusé, peu importe comment la petite exception est qu'il sera lancé. La méthode de gestion des exceptions préconisée par golang est :

Exception ordinaire : l'appelé renvoie l'objet d'erreur, et l'appelant détermine l'objet d'erreur.

Exception sérieuse : fait référence à une panique disruptive (telle qu'une division par 0), qui est capturée et traitée à l'aide du mécanisme de report...récupération...panique. Les exceptions sérieuses sont généralement automatiquement lancées en interne par Golang et n'exigent pas que les utilisateurs les lancent activement, évitant ainsi la situation où le try...catch traditionnel est écrit partout. Bien sûr, les utilisateurs peuvent également utiliser panic('xxxx') pour lancer activement, mais cela dégénérera ce mécanisme en un mécanisme d'exception structuré. Le langage

Reflection

Go fournit un mécanisme pour mettre à jour et vérifier la valeur des variables, appeler des méthodes de variables et des opérations intrinsèques prises en charge par les variables au moment de l'exécution, mais les variables ne sont pas connues au moment de la compilation Spécifique au type, ce mécanisme s'appelle la réflexion. La réflexion nous permet également de traiter le type lui-même comme un type valeur de première classe.

La réflexion fait référence à la possibilité d'accéder et de modifier le programme lui-même pendant l'exécution du programme. Lorsque le programme est compilé, les variables sont converties en adresses mémoire ne seront pas écrites dans la partie exécutable par le compilateur. Lorsque le programme est exécuté, le programme ne peut pas obtenir d'informations sur vous-même.

Les langages prenant en charge la réflexion peuvent intégrer les informations de réflexion des variables, telles que les noms de champs, les informations de type, les informations de structure, etc., dans le fichier exécutable lors de la compilation du programme, et fournir au programme une interface pour accéder aux informations de réflexion. , afin que le programme puisse s'exécuter. Fournit un accès aux informations de réflexion de type et la possibilité de les modifier.

Le langage C/C++ ne prend pas en charge la fonction de réflexion et ne peut fournir que des informations de type d'exécution de programme très affaiblies via typeid ; les langages tels que Java et C# prennent tous en charge des fonctions de réflexion dynamiques complètes telles que Lua et JavaScript ; en raison de leurs propres caractéristiques grammaticales, cela permet au code d'accéder aux propres informations de valeur et de type du programme au moment de l'exécution, donc aucun système de réflexion n'est nécessaire.

Le système de réflexion du programme en langage Go ne peut pas obtenir toutes les informations de type dans un espace de fichier exécutable ou un package. Il doit utiliser le lexical, l'analyseur de syntaxe et l'arbre de syntaxe abstraite (AST) correspondants dans la bibliothèque standard pour analyser le code source obtenu. ces informations plus tard.

【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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal