Maison > Article > développement back-end > Quelle est la fonctionnalité la plus importante du langage Go
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.
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
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.
Le langage Go est beaucoup plus simple que la plupart des langagesen 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.
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é.
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 retourdes 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!