Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 10198|Répondre: 1

Avantages et inconvénients de la programmation dans Go

[Copié le lien]
Publié sur 27/05/2019 09:57:10 | | |
Quelle est la popularité de la langue Go ? Des pays étrangers comme Google, AWS, Cloudflare, CoreOS, etc., ainsi que des entreprises nationales telles que Qiniu et Alibaba, ont commencé à utiliser le langage Go pour développer leurs produits liés à l’informatique en nuage à grande échelle. Quels oui et mais devrais-je surveiller lorsque j’utilise le langage Go ?

Récemment, nous avons écrit une API utilisant le langage Go, un langage de programmation open source lancé par Google en 2009. Au cours de l’utilisation de Go pour le développement, nous avons acquis beaucoup d’expérience et d’expérience, et nous souhaitons la partager avec les lecteurs, c’est pourquoi nous avons publié cet article.

Lors du choix d’un langage de programmation pour un projet, nous recommandons toujours de comprendre ce que le projet va intégrer avant de réfléchir sur quel langage de programmation s’appuyer. Laissez le produit être le facteur décisif dans la manière dont il doit être construit.

Voici quelques-uns des avantages et inconvénients que nous avons relevés lors du développement avec Go pour vous aider à comprendre si cela convient à votre prochain projet.

Ce que nous aimons chez Go

L’utilisation du langage Go a explosé ces dernières années. Il semble que toutes les startups l’utilisent pour les systèmes backend. Il y a de nombreuses raisons pour lesquelles les développeurs considèrent que ce projet est si populaire.

Le langage du Go est très rapide

Go est un langage de programmation très rapide. Parce que Go est compilé en code machine, il surpasse naturellement les langages de programmation interprétatifs ou disposant d’un temps d’exécution virtuel. Les programmes Go compilent aussi très rapidement et produisent de très petits binaires. Notre API se compile en seulement quelques secondes, donnant un fichier exécutable aussi petit que 11,5 Mo.

Facile à maîtriser

La syntaxe du langage Go est simple et facile à comprendre comparée à d’autres langages. Vous pouvez mémoriser la plupart de la syntaxe du Go dans votre tête, ce qui signifie que vous n’avez pas à passer beaucoup de temps à chercher des choses. La langue du go est aussi très claire et facile à lire. Les programmeurs non-Go, en particulier ceux habitués à la syntaxe de style C, peuvent lire le code du programme Go et comprendre ce qui se passe.

Langage de définition de types statique

Go est un puissant langage statique définissant des types. Il existe des types de base comme int, octet et chaîne. Il existe aussi des types de structures. Comme pour tout langage fortement typé, le système de types permet au compilateur d’aider à détecter les erreurs pour l’ensemble de la classe. Le langage Go propose également des types de listes et de mappage intégrés, et ils sont aussi faciles à utiliser.

Type d’interface

Le langage Go possède des types d’interface, et toute structure peut simplement satisfaire une interface en implémentant l’interface. Cela vous permet de découpler les dépendances dans votre code. Vous pouvez ensuite simuler vos dépendances dans vos tests. En utilisant des interfaces, vous pouvez écrire un code plus modulaire et testable. Le langage Go dispose également de fonctions de premier ordre, ce qui permet aux développeurs d’écrire du code de manière plus pratique.

Bibliothèque standard

Le langage Go a une bibliothèque standard assez bonne. Il offre des fonctions intégrées pratiques pour la gestion des types de base. Certains packages facilitent la construction d’un serveur web, la gestion des E/S, l’utilisation du chiffrement et la manipulation des octets bruts. La sérialisation et la désérialisation JSON fournies par la bibliothèque standard sont très simples. En utilisant « tags », vous pouvez spécifier le nom du champ JSON à côté du champ struct.

Support des tests

Le support des tests est intégré à la bibliothèque standard et ne nécessite aucune dépendance supplémentaire. Si vous avez un fichier appelé thing.go, écrivez des tests dans un autre fichier appelé thing_test.go et lancez « go test ». Go effectuera ces tests rapidement.

Outils d’analyse statique

Les outils d’analyse statique pour le langage Go sont nombreux et puissants. Un outil en particulier est gofmt, qui formate le code selon le style suggéré par Go. Cela peut normaliser de nombreuses opinions du projet, permettant au responsable de l’attribution de l’équipe de se concentrer sur le travail accompli par le code. Nous utilisons gofmt, golint et vet sur chaque build, et si nous trouvons des avertissements, le build échoue.

Collecte des ordures

Lors de la conception du langage Go, la gestion de la mémoire a été intentionnellement conçue pour être plus facile que le C et le C++. L’objet de l’allocation dynamique est la collecte des ordures. Le langage Go rend l’utilisation du pointeur plus sécurisée car il n’autorise pas les opérations de pointeur. L’option d’utiliser les types de valeur est également proposée.

Modèle de concurrence plus facile

Bien que la programmation simultanée ne soit jamais facile, Go est plus facile à programmer simultanément que d’autres langages. Créer un thread léger appelé « goroutine » et communiquer avec lui via un « canal » est presque une tâche simple, mais c’est possible pour des modèles plus complexes.

Ce qu’on n’aime pas chez Go

Comme nous l’avons discuté plus tôt, le Go est en effet une excellente langue. Il a une syntaxe propre et est rapide à exécuter. Cela présente également de nombreux avantages. Mais l’ensemble d’un langage de programmation ne se réfère pas seulement à sa syntaxe. Voici quelques-uns des problèmes que nous avons rencontrés.

Il n’y a pas de génériques

Premièrement, ce problème, comme un éléphant dans une pièce, est un fait évident et négligé. Il n’y a pas de génériques dans le langage Go. Pour les développeurs issus de langages comme Java, passer à Go est un énorme obstacle à surmonter. Cela signifie que le niveau de réutilisation du code est réduit. Bien que le langage Go ait des fonctions de première classe, si vous écrivez des fonctions telles que « map », « reduce » et « filter », qui sont conçues pour fonctionner sur un type de collection, vous ne pouvez pas réutiliser ces fonctions pour d’autres types de collections différentes. Il existe de nombreuses façons de résoudre ce problème, mais elles finissent toutes par écrire plus de code, ce qui réduit la productivité et la maintenabilité.

L’interface est implicite

Bien que ce soit agréable d’avoir des interfaces, la structure implémente les interfaces de manière implicite plutôt qu’explicite. On dit que c’est l’un des points forts du langage Go, mais nous avons eu du mal à déterminer à la structure s’il implémentait des interfaces ou non. On ne peut vraiment comprendre qu’en essayant de compiler le programme. Si le programme est petit, il n’y a certainement rien de mal à cela. Mais si ce programme est de taille moyenne à grande, le problème est important.

Mauvais soutien des bibliothèques

Le support de la bibliothèque Go est inégal. Notre API s’intègre à Contentful, mais ce dernier ne dispose pas d’un SDK Go officiellement pris en charge. Cela signifie que nous devons écrire (et maintenir !) Il y a beaucoup de code pour demander et analyser les données dans Contentful. Nous devons aussi compter sur des bibliothèques Elasticsearch tierces. Les SDK Go fournis par les fournisseurs ne sont pas aussi populaires que leurs équivalents Java, Ruby ou JavaScript.

La communication communautaire est difficile

La communauté Go peut ne pas accepter les suggestions. Considérez ceci dans le dépôt GitHub de Golint :La connexion hyperlientérée est visible., un utilisateur a demandé que Golint puisse échouer la compilation lorsqu’il trouvait un avertissement (ce que nous faisons dans le projet). Les défenseurs rejetèrent immédiatement cette idée. Cependant, comme trop de personnes ont commenté le problème, après un an, les mainteneurs ont finalement dû ajouter les fonctionnalités demandées.

La communauté Go ne semble pas non plus apprécier les frameworks web. Bien que la bibliothèque HTTP du langage Go couvre de nombreux aspects, elle ne prend pas en charge les paramètres de chemin, la vérification des entrées et la validation, ni ne prend en charge les préoccupations transversales courantes dans les applications web. Les développeurs Ruby ont Rails, les développeurs Java ont Spring MVC, et les développeurs Python ont Django. Mais de nombreux développeurs Go choisissent d’éviter d’utiliser des frameworks. Cependant, la réalité est qu’il n’y a pas de cadres de formation, au contraire, il y en a beaucoup. Mais une fois que vous commencez à utiliser un cadre pour un projet, il est presque impossible d’éviter le destin de l’abandon.

Gestion fragmentée des dépendances

Pendant longtemps, le langage Go n’a pas eu de gestionnaire de paquets stable et formel. Après des années de sollicitations communautaires, le projet Go a récemment publié godep. Avant cela, il existait déjà de nombreux outils pour combler ce vide. Nous utilisons un govendor très puissant dans notre projet, mais cela signifie que la communauté est divisée, ce qui peut être très déroutant pour les développeurs qui découvrent le langage Go. De plus, presque tous les gestionnaires de paquets sont alimentés par des dépôts Git, et l’historique des dépôts Git peut changer à tout moment. Comparez cela à Maven Central, qui ne supprime jamais ni ne modifie les bibliothèques dont votre projet dépend.

Décidez si vous utilisez Go ou non

Parfois, il faut penser à la machine. Lorsque vous envoyez et recevez des octets. Quand vous gérez des milliers de processus simultanés. Vous pouvez aussi écrire un système d’exploitation, un système de conteneurs ou un nœud blockchain. Dans ces cas-là, il est fort probable que les génériques ne vous intéressent pas. Parce que vous êtes occupé à extraire la performance par nanoseconde de la puce.

Cependant, bien souvent, il faut penser aux humains. Les données de la zone d’activité avec lesquelles vous devez travailler : clients, employés, produits, commandes. Vous devez écrire la logique métier qui opère sur ces entités de domaine, et vous devez maintenir cette logique métier pendant de nombreuses années. Et il doit répondre à l’évolution des besoins, et plus vite c’est possible. Dans ces cas, l’expérience du développeur est importante.

Go est un langage de programmation qui valorise le temps machine plus que le temps humain. Parfois, dans votre domaine, la performance de la machine ou du programme est la plus critique. Dans ces cas, Go peut être une bonne alternative en C ou C++. Mais lorsque vous écrivez une application typique n-paliers, des goulots d’étranglement de performance apparaissent souvent dans la base de données et, plus important encore, dans la manière dont vous allez modéliser les données.

Lorsque vous décidez d’utiliser le langage Go, considérez les règles générales suivantes :

  • Si vous traitez avec des octets, alors le langage Go pourrait être un bon choix.
  • Si vous travaillez avec des données, alors le langage Go n’est peut-être pas un bon choix.


Cela pourrait changer un jour. La langue et la communauté du go sont encore jeunes. Ils pourraient nous surprendre avec l’ajout de génériques ; Ou un framework web populaire gagnera gros. Cependant, pour l’instant, nous resterons sur des langages de programmation matures avec un support universel, une gestion des dépendances mature et un focus sur la modélisation des domaines métier.





Précédent:Configuration de Common.LoggingLog
Prochain:C# discuz POST
Publié sur 27/05/2019 10:09:35 |
Bien que je n’aie pas eu beaucoup de contacts avec la langue Go, elle était bien écrite
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com