Inconvénients du langage go : 1. "Désavantage de performances" causé par le choix de l'itinéraire technique. Go est un langage de programmation GC Dans certaines situations où les performances sont super sensibles, il faut quand même être prudent lors du choix de Go. 2. La "méthode d'expression unique" et la gestion explicite des erreurs sont un peu "dépassées". 3. La plus petite version choisit MVS, qui s'écarte du courant dominant. 4. L'équipe principale de Go a un contrôle total sur l'évolution du langage. La majorité de la communauté est d'accord, cela sera certainement Le fait d'être adopté et ajouté au langage Go a entraîné un désavantage dans la communauté. Il y a une « fracture » entre la communauté Go et l'équipe principale de Go 5. Faible fonctionnalité
.
L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.
Chaque langage de programmation a ses propres avantages et inconvénients, et Go ne fait pas exception. de Go :
Avantages de Go
1. Facile à apprendre
Le langage Go a une syntaxe simple, qui contient une syntaxe similaire au langage C. Si le lecteur maîtrise deux à trois langages de programmation, cela ne prend que quelques minutes. quelques jours pour apprendre le langage Go, même pour un nouveau développeur, vous pouvez écrire un programme en langage Go hautes performances en quelques semaines
2 Gratuit et efficace
La vitesse de compilation du langage Go est nettement meilleure que celle de Java. et C++, et il a également une efficacité de fonctionnement proche du langage C et un développement proche de PHP, on peut dire que le langage Go intègre parfaitement l'efficacité de fonctionnement et l'efficacité de développement
En même temps, le langage Go prend également en charge tout. paradigmes de programmation actuels, y compris la programmation procédurale, la programmation orientée objet, la programmation orientée interface et le développement de programmation fonctionnelle.
Bibliothèque standard puissante
La bibliothèque standard de Go est très stable et. divers, y compris le réseau, le système, le cryptage, l'encodage, les graphiques et d'autres aspects, en particulier les bibliothèques réseau et système. Il est très pratique et permet aux développeurs de ne pas s'appuyer sur des bibliothèques tierces lors du développement de gros programmes
4.
Pas besoin d'utiliser une machine virtuelle, le code du langage Go peut être directement généré sous forme de fichier exécutable binaire, et le langage Go possède son propre éditeur de liens et ne repose sur aucun compilateur ou éditeur de liens fourni par le système. Le fichier exécutable binaire compilé peut s'exécuter dans presque tous les environnements système. 5. La prise en charge native de la concurrenceLe langage Go est très efficace. Le langage prend en charge la concurrence de manière native à partir de la couche linguistique et est très simple à utiliser. basé sur Goroutine. Goroutine est similaire aux threads, mais ce n'est pas un thread. C'est une méthode légère de threading en langage Go. Le coût de création de Goroutine est très faible, seulement quelques milliers d'octets de mémoire supplémentaire. un hôte de bureau ordinaire sera surchargé lors de l'exécution de centaines de threads, mais le même hôte peut exécuter des milliers, voire des dizaines de milliers de Goroutines. La communication peut être réalisée via des canaux Goroutine et les méthodes de concurrence basées sur les canaux peuvent maximiser l'utilisation des ressources du processeur. 6. Forte stabilitéLe langage Go dispose de contrôles de compilation puissants, de normes de codage strictes et d'une forte stabilité. De plus, le langage Go fournit également des outils pour chaque aspect du cycle de vie du logiciel (tels que le développement, les tests, le déploiement, la maintenance, etc.), tels que : aller à l'outil, aller à fmt, aller tester, etc. 7. Garbage collectionLors du développement à l'aide du langage Go, les développeurs n'ont qu'à prêter attention à l'application de mémoire et n'ont pas à se soucier de la libération de mémoire, car le langage Go a un runtime intégré pour la gestion automatique. Bien que le GC (Garbage Collection, mécanisme de collecte des ordures) ne soit pas parfait à l'heure actuelle, il suffit à faire face à la plupart des situations rencontrées lors du développement, permettant aux développeurs de se concentrer davantage sur le business. Dans le même temps, le langage Go permet également aux développeurs de faire ce travail. optimisé. Inconvénients de Go1. "Désavantage de performances" causé par le choix de l'itinéraire technique
Comme nous le savons tous, Go est un langage de programmation avec garbage collection, donc peu importe la durée du STW de Go (Stop The À l'heure mondiale, le retard GC est si petit qu'il appartient toujours au langage de programmation de classe GC et appartient au même camp que Java et C#. En même temps, il est naturellement séparé des langages de programmation tels. comme C, C++ et Rust qui gèrent manuellement la mémoire et n'ont aucune charge GC d'exécution. Effacé la ligne. Bien que l'intention initiale du langage Go soit de devenir un langage de programmation au niveau du système, bien que les performances d'exécution de Go puissent répondre aux besoins de 99,99 % des occasions, bien que les milliards de trafic de Baidu [moteur de transfert BFE], la base de données de séries chronologiques [influxdb], et base de données relationnelle distribuée [ TiDB] et d'autres projets sensibles aux performances ont choisi d'être implémentés dans Go, mais on ne peut nier que dans certaines situations extrêmement sensibles aux performances, vous devez toujours être prudent lorsque vous choisissez Go. 2 "Inconvénients de l'expression" provoqués par l'adhésion à sa propre philosophie de conception1) Méthode d'expression "unique"De nombreux développeurs qui sont passés au camp Go à partir d'autres langages se plaignent que Go a trop peu d'astuces et aucun routines Pour beaucoup, la raison pour laquelle Go présente un « désavantage d'expression » découle d'un principe de sa philosophie de conception : « Prôner qu'il n'y a qu'une ou plusieurs façons d'écrire une chose ». Ce principe ne répond pas aux besoins psychologiques de certains développeurs de montrer leurs compétences, c'est pourquoi Go est critiqué comme un langage utilisé uniquement par des programmeurs aux qualifications médiocres.[Go 1.18 ajoutera des génériques (paramètres de type)], ce qui peut être considéré comme une "compensation" pour de tels "inconvénients". Cependant, pour ceux d'entre nous, Gophers, qui reconnaissent depuis longtemps les valeurs et la philosophie de conception de Go, nous sommes très inquiets que [les génériques], qui ont considérablement amélioré les capacités d'expression de Go, ne deviennent un « terrain fertile » pour les trucs et astuces.
2) Gestion explicite des erreurs "obsolètes"
Depuis le jour de sa naissance, le langage Go n'a pas fourni de gestion structurée des erreurs try-catch-finally basée sur des exceptions comme les langages de programmation traditionnels tels que C++, Java et Python . Mécanisme, les concepteurs de Go pensent que [le couplage des exceptions dans les structures de contrôle du programme entraînera une confusion dans le code]. Go fournit un mécanisme simple de gestion des erreurs basé sur la comparaison des valeurs d'erreur, qui "oblige" chaque développeur Go à prêter explicitement attention et à gérer chaque erreur. Le code avec une gestion explicite des erreurs sera également plus robuste. code. Cependant, la persistance de cette philosophie de conception a été ridiculisée par de nombreux développeurs d'autres langages comme étant « dépassée » et qualifiée de « mécanisme ancien d'il y a un demi-siècle ». (Note de l'auteur : Le mécanisme de gestion des erreurs utilisé lors de la naissance du langage C dans les années 1970)
L'équipe de développement de Go a également été « ébranlée ». L'équipe de développement de Go a publié plusieurs versions de [Go error handleling new version] après la sortie. le plan Go2. La communauté Go a également eu de longues discussions et même des « querelles » sur cette question. Le célèbre Gopher Dave Cheney s'est prononcé, Rob Pike s'est exprimé et William Kennedy, un entraîneur de Go bien connu et l'un des co-auteurs de " Go Language Practical Combat" Après l'annonce de la proposition d'essai de l'équipe Go, ils ont publié une lettre ouverte à la communauté Go s'opposant au plan d'essai. En fin de compte, le groupe qui a insisté sur la philosophie de conception Go a pris le dessus et la proposition d'essai a été rejeté et n'a pas été inclus dans la [version Go 1.13] !
3. "Inconvénient de niche" qui s'écarte du courant dominant
La première conception par Go du mécanisme de gestion des dépendances des packages présente de nombreux "défauts", qui découlent de l'influence du grand entrepôt de code unique interne de Google et du modèle de développement basé sur le tronc. . Le langage Go en dehors de Google a entendu des voix sous différents aspects. Le mécanisme de gestion des packages Go a longtemps été incapable de répondre aux besoins de la communauté. En conséquence, des tentatives ont été faites pour améliorer la gestion des dépendances des packages, telles que [mécanisme fournisseur] et [dep].
Au début de 2018, juste au moment où la plupart des gophers pensaient que dep serait "naturellement" mis à niveau pour faire partie de la chaîne d'outils officielle de Go, Russ Cox, le leader technique de l'équipe principale de Go et l'un des premiers membres de Go core team, posté sur son blog personnel Il a publié [sept articles] d'affilée, élaborant systématiquement la solution technique de l'équipe Go pour la « gestion des dépendances des packages » : [vgo], le prédécesseur du module go.
Les idées principales de vgo incluent : le contrôle de version d'importation sémantique et la sélection de version minimale, qui sont contraires aux règles actuelles de gestion des dépendances des packages des langages de programmation traditionnels, en particulier [Sélection de version minimale (MVS)], qui est considérée comme une nouvelle approche et s'écarte du grand public !
4. Le « désavantage de la communauté » causé par le « centralisme démocratique » de l'équipe principale de Go
est différent de l'adoption massive par l'équipe de Rust des suggestions de la communauté pour « augmenter les fonctionnalités du langage ». attitude envers l'évolution de la langue Avec un contrôle total, à moins que la majorité de la communauté ne soit d'accord, elle sera définitivement adoptée et ajoutée à la langue Go, je l'appelle en plaisantant « centralisme démocratique », c'est-à-dire que les véritables droits de vote appartiennent en réalité à la minorité. des personnes représentant la communauté au sein de l’équipe principale de Go.
Le différend entre dep et vgo début 2018 est une manifestation typique de ce "désavantage". Le projet de développement pour lequel la communauté a travaillé dur pendant plus d'un an a été "évincé" par vgo, qui a été conçu par Russ Cox et quelques autres personnes qui ont passé du temps à se concentrer sur sa conception. Le standard de l'outil de gestion des dépendances des packages est devenu un « tremplin » pour le succès des modules Go. Même s'il s'avère que la décision de l'équipe Go d'utiliser le module go est correcte, la « fracture » provoquée par cela entre la communauté Go et l'équipe principale de Go existe, de sorte qu'au cours des deux dernières années, l'équipe principale de Go a travaillé difficile d'améliorer les relations avec la communauté Go, en normalisant et en transparentisant le processus de proposition, d'examen et d'acceptation des propositions Go.
5. Après l'échec d'une attaque globale, la "faiblesse fonctionnelle" provoquée par l'échec des attentes
Après la sortie de Go 1.5, en raison de la réduction significative des délais de démarrage et de GC, Go a progressivement attiré davantage d'attention jusqu'à ce que le début 2017. Remporter pour la deuxième fois le prix TIOBE du meilleur langage de programmation de l'année a rendu le langage Go quelque peu « gonflé ». Même les partisans fanatiques de Go espéraient autrefois que Go dominerait le monde : non seulement contrôlerait fermement son propre marché natif du cloud, mais mais aussi occuper le marché de Java au niveau de l'entreprise. Il doit également vaincre les adversaires existants sur le terminal (android. ios) et le front-end (js).
Certaines personnes peuvent penser que mes déclarations ci-dessus sont ridicules, mais elles ne sont pas sans fondement. Le langage Go a vraiment réalisé de grandes réalisations dans les aspects terminaux et front-end. Quiconque connaît l'histoire de Go sait que l'équipe Go avait autrefois des développeurs à plein temps participant au [projet gomobile](, qui vise à construire la technologie Go. pile sur Android et iOS , pour atteindre l'objectif d'écrire des applications de terminal en langage Go
En termes de front-end, le [projet gopherjs] peut compiler le code go en code js et l'exécuter dans les principaux navigateurs. gopherjs a aidé le projet go à prendre en charge nativement le webassembly. Prend en charge la compilation de go dans webassembly et son exécution dans le navigateur
.Mais la tentative ci-dessus n'a finalement pas réussi à « obtenir ce que nous voulions ». La situation actuelle est que dans le domaine des applications terminales et frontales, très peu de gens utilisent le codage Go. Alors Go s'est progressivement calmé et est revenu sur le champ de bataille principal où il était bon, retournant dans les domaines des applications d'entreprise, des infrastructures, des middlewares, des microservices, des applications en ligne de commande, etc., et a gagné la faveur de de plus en plus de développeurs dans ces champs.
Cependant, l'échec de l'attaque totale a laissé de nombreux développeurs avec l'excuse que "les fonctions de Go sont faibles". Certains disent même que [mon père Google] ne pouvait pas laisser son frère Android créer une porte dérobée pour Go.
【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!