Table des matières
Ce que nous aimons chez Go
Ce que nous n'aimons pas chez Go
Maison développement back-end Golang À propos des avantages et des inconvénients de la programmation en langage Go

À propos des avantages et des inconvénients de la programmation en langage Go

Aug 24, 2020 pm 01:09 PM
go语言编程

La chronique suivante du Tutoriel Golang vous présentera les avantages et les inconvénients de la programmation en langage Go. J'espère qu'elle sera utile aux amis dans le besoin !

À propos des avantages et des inconvénients de la programmation en langage Go

Récemment, nous avons écrit une API utilisant Go, un langage de programmation open source lancé par Google en 2009. Au cours du processus d'utilisation de Go pour le développement, nous avons acquis beaucoup d'expérience et d'informations, et nous souhaitons les partager avec les lecteurs, c'est pourquoi cet article a été rédigé.

Lors du choix d'un langage de programmation pour un projet, nous recommandons toujours de comprendre ce que le projet va construire avant de réfléchir au langage de programmation à utiliser pour le construire. Laissez le produit être le facteur décisif dans la manière dont il doit être construit.

Voici quelques-uns des avantages et des inconvénients que nous avons trouvés lors du développement dans Go, qui peuvent vous aider à comprendre si Go est le bon langage pour construire votre prochain projet.

Ce que nous aimons chez Go

L'utilisation du langage Go a explosé ces dernières années. Il semble que chaque startup l'utilise pour les systèmes backend. Les développeurs pensent qu’il existe de nombreuses raisons pour lesquelles il est si populaire.

Le langage Go est très rapide

Le langage Go est un langage de programmation très rapide. Étant donné que le langage Go est compilé en code machine, il fonctionnera naturellement mieux que les langages de programmation interprétés ou dotés d'exécutions virtuelles. Les programmes Go se compilent également très rapidement et les binaires résultants sont très petits. Notre API se compile en quelques secondes seulement et l'exécutable résultant ne fait que 11,5 Mo.

Facile à maîtriser

Par rapport à d'autres langages, la syntaxe du langage Go est très simple et facile à maîtriser. Vous pouvez conserver la majeure partie de la syntaxe de Go dans votre tête, ce qui signifie que vous n'avez pas besoin de passer beaucoup de temps à rechercher des choses. Le langage Go est également très propre et facile à lire. Les programmeurs non-Go, en particulier ceux habitués à la syntaxe de style C, peuvent lire le code Go et comprendre ce qui se passe.

Langage de définition de type statique

Le langage Go est un puissant langage de définition de type statique. Il existe des types de base tels que int, byte et string. Il existe également des types structurels. Comme pour tout langage fortement typé, le système de types permet au compilateur de détecter les erreurs entre les classes. Le langage Go possède également des types de listes et de cartes intégrés, et ils sont également faciles à utiliser.

Type d'interface

Le langage Go a un type d'interface, et toute structure peut satisfaire l'interface simplement en implémentant la méthode d'interface. Cela vous permet de découpler les dépendances dans votre code. Vous pouvez ensuite vous moquer de vos dépendances dans vos tests. En utilisant des interfaces, vous pouvez écrire du code plus modulaire et testable. Le langage Go possède également des fonctions de premier ordre, qui permettent aux développeurs d'écrire du code de manière plus pratique.

Bibliothèque standard

Le langage Go possède une assez bonne bibliothèque standard. Il fournit des fonctions intégrées pratiques pour travailler avec des types de base. Il existe des packages qui vous permettent de créer facilement un serveur Web, de gérer les E/S, d'utiliser des techniques de chiffrement et de manipuler les octets bruts. La sérialisation et la désérialisation JSON fournies par la bibliothèque standard sont très simples. En utilisant des "tags", vous pouvez spécifier des noms de champs JSON à côté des champs de structure.

Prise en charge des tests

La prise en charge des tests est intégrée à la bibliothèque standard et ne nécessite aucune dépendance supplémentaire. Si vous avez un fichier appelé thing.go, écrivez vos tests dans un autre fichier appelé thing_test.go et exécutez "go test". Go exécutera rapidement ces tests.

Outils d'analyse statique

Le langage Go dispose de nombreux et puissants outils d'analyse statique. Un outil en particulier est gofmt, qui formate le code selon le style suggéré par Go. Cela normalise de nombreuses opinions sur le projet et permet aux chefs d'équipe de se concentrer sur le travail effectué par le code. Nous exécutons gofmt, golint et vet sur chaque build, et si des avertissements sont détectés, la build échouera.

Garbage Collection

Lorsque le langage Go a été conçu, la gestion de la mémoire a été intentionnellement conçue pour être plus simple que le C et le C++. Les objets alloués dynamiquement sont récupérés. Le langage Go rend l'utilisation des pointeurs plus sûre car il ne permet pas l'arithmétique des pointeurs. La possibilité d’utiliser des types valeur est également fournie.

Un modèle de concurrence plus simple

Bien que la programmation simultanée n'ait jamais été facile, Go la rend plus facile que d'autres langages. C'est presque aussi simple que de créer un thread léger appelé « goroutine » et de communiquer avec lui via un « canal ». Des modèles plus complexes sont également possibles.

Ce que nous n'aimons pas chez Go

Comme nous en avons discuté plus tôt, Go est en effet un excellent langage. Il a une syntaxe claire et est rapide à exécuter. Il présente également de nombreux avantages. Cependant, un langage de programmation ne se résume pas uniquement à sa syntaxe. Voici quelques-uns des problèmes que nous avons rencontrés.

Pas de génériques

Tout d'abord, ce problème est comme l'éléphant dans la pièce, c'est un fait évident mais ignoré. Le langage Go n'a pas de génériques. Pour les développeurs issus d’un langage 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 possède des fonctions de première classe, si vous écrivez des fonctions telles que « map », « reduce » et « filter » et concevez ces fonctions pour qu'elles fonctionnent sur des collections d'un type, vous ne pouvez pas réutiliser ces fonctions sur des collections de types différents. . Il existe de nombreuses façons de résoudre ce problème, mais elles impliquent toutes en fin de compte d'écrire davantage de code, ce qui réduit la productivité et la maintenabilité.

Les interfaces sont implicites

Bien qu'il soit agréable d'avoir des interfaces, les structures implémentent des interfaces implicitement plutôt qu'explicitement. C'est considéré comme l'un des points forts du langage Go, mais nous avons eu du mal à déterminer à partir de la structure s'il implémente l'interface. Vous ne pouvez vraiment le savoir qu’en essayant de compiler le programme. Ce n'est certainement pas un problème si le programme est petit. Mais si le programme est de moyenne à grande échelle, les problèmes seront grands.

Mauvaise prise en charge des bibliothèques

La prise en charge des bibliothèques de Go est inégale. Notre API s'intègre à Contentful, qui ne dispose pas de SDK Go officiellement pris en charge. Cela signifie que nous devons écrire (et maintenir !) beaucoup de code pour demander et analyser les données de Contentful. Nous devons également nous appuyer sur des bibliothèques Elasticsearch tierces. Les SDK Go fournis par les fournisseurs ne sont pas aussi populaires que leurs homologues Java, Ruby ou JavaScript.

La communication avec la communauté est difficile

La communauté Go peut ne pas accepter les suggestions. Considérez ce problème dans le référentiel GitHub de golint : https://github.com/golang/lint/issues/65, un utilisateur a demandé que golint puisse faire échouer la construction lorsqu'un avertissement est trouvé (c'est ce que nous faisons dans le cadre du projet ). Les responsables ont immédiatement rejeté l'idée. Cependant, tant de personnes ont commenté le problème que les responsables ont fini par ajouter la fonctionnalité demandée un an plus tard.

La communauté Go semble également détester les frameworks Web. Bien que la bibliothèque HTTP de Go couvre beaucoup de terrain, elle ne prend pas en charge les paramètres de chemin, la vérification et la validation des entrées, ni les problèmes transversaux courants 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’existe pas de cadres, bien au contraire, ils sont nombreux. Mais une fois que vous commencez à utiliser un framework pour un projet, il est presque impossible d’éviter l’abandon.

Gestion des dépendances fractionnées

Pendant longtemps, le langage Go n'avait pas de gestionnaire de paquets stable et formel. Le projet Go n'a publié que récemment Godep après des années de mendicité communautaire. De nombreux outils ont déjà comblé cette lacune. Nous utilisons Govendor, qui est très puissant, pour nos projets, mais cela signifie que la communauté est fragmentée et peut être très déroutante pour les développeurs qui découvrent le langage Go. De plus, presque tous les gestionnaires de packages sont alimentés par des référentiels Git et l'historique des référentiels Git peut changer à tout moment. Comparez cela à Maven Central, qui ne supprime ni ne modifie jamais les bibliothèques dont dépend votre projet.

Décider d'utiliser ou non Go

Parfois, vous devez tenir compte de la situation de la machine. Lorsque vous envoyez et recevez des octets. Lorsque vous gérez des milliers de processus simultanés. Vous pourriez également écrire un système d’exploitation, un système de conteneurs ou un nœud blockchain. Dans ces cas-là, vous ne vous soucierez probablement pas des génériques. Parce que vous êtes occupé à extraire chaque nanoseconde de performances de la puce.

Mais, bien souvent, il faut penser aux humains. Données du domaine métier que vous devez traiter : clients, employés, produits, commandes. Vous devez écrire une logique métier qui fonctionne sur ces entités de domaine et vous devez maintenir cette logique métier au fil des années. Et vous devez faire face à des besoins changeants, et vous devez le faire le plus rapidement possible. Dans ces cas, l’expérience du développeur est importante.

Go est un langage de programmation qui valorise le temps machine par rapport au temps humain. Parfois, les performances de la machine ou du programme sont les plus critiques dans votre domaine. Dans ces cas-là, Go peut être une bonne alternative au C ou au C++. Cependant, lorsque vous écrivez une application n-tier typique, des goulots d'étranglement en termes de performances surviennent souvent au niveau de la base de données et, plus important encore, dans la manière dont vous modélisez les données.

Lorsque vous décidez d'utiliser Go, tenez compte des règles empiriques suivantes :

  • Si vous avez affaire à des octets, le langage Go peut être un bon choix.

  • Si vous traitez des données, le langage Go n'est peut-être pas un bon choix.

Cette situation pourrait changer un jour dans le futur. La langue et la communauté Go sont encore très jeunes. Ils pourraient nous surprendre et ajouter des génériques ; ou un framework Web populaire pourrait prendre le relais. Pour l'instant, cependant, nous nous en tiendrons aux langages de programmation matures qui bénéficient d'un support universel, d'une gestion des dépendances mature et nous concentrerons sur la modélisation du domaine métier.

Pour plus d'articles techniques sur Go, veuillez visiter la colonne Tutoriel sur le langage Go !

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser le langage Go pour rédiger le module de feedback utilisateur dans le système de cuisson en porte-à-porte ? Comment utiliser le langage Go pour rédiger le module de feedback utilisateur dans le système de cuisson en porte-à-porte ? Nov 01, 2023 pm 04:36 PM

Comment utiliser le langage Go pour rédiger le module de feedback utilisateur dans le système de cuisson en porte-à-porte ? Avec l’essor des services de plats à emporter et de porte-à-porte, de plus en plus d’utilisateurs choisissent de déguster de délicieux plats à la maison. Pour les services de cuisine en porte-à-porte, les commentaires des utilisateurs sont particulièrement importants, car ils peuvent contribuer à améliorer la qualité du service et la satisfaction des utilisateurs. Cet article explique comment utiliser le langage Go pour écrire le module de commentaires des utilisateurs dans le système de cuisson porte-à-porte et fournit des exemples de code spécifiques. Conception et création d'une base de données Tout d'abord, nous devons concevoir une base de données pour stocker les informations des commentaires des utilisateurs. Supposons que nous ayons un flux appelé

Comment optimiser les performances de Beego ? Comment optimiser les performances de Beego ? Jun 23, 2023 pm 12:51 PM

Beego est l'un des frameworks Web couramment utilisés dans le langage Go. Il présente les avantages d'un développement rapide, d'un déploiement binaire et d'une concurrence élevée. Cependant, dans un environnement de requêtes concurrentes élevées, les besoins d’optimisation des performances du framework Beego sont mis en évidence. Cet article expliquera comment optimiser les performances de Beego grâce à une configuration raisonnable, un code optimisé, un cache, etc. 1. Utilisez un mécanisme de mise en cache efficace. La mise en cache peut améliorer considérablement les performances des applications et réduire le nombre de requêtes de base de données. Le mécanisme de mise en cache du framework Beego est également très simple et facile à utiliser et peut être appliqué à différentes échelles.

Comment utiliser le langage Go pour programmer efficacement Comment utiliser le langage Go pour programmer efficacement Mar 23, 2024 am 08:54 AM

Comment améliorer l’efficacité de la programmation en langage Go ? Pourquoi le langage Go est-il si important pour les programmeurs ? Avec la popularité rapide du langage Go dans le domaine du développement logiciel, de plus en plus de développeurs s'intéressent à ce langage de programmation. Le langage Go a été largement salué pour sa simplicité, son efficacité et sa facilité d'utilisation, et est progressivement devenu un langage de programmation courant. Alors, comment pouvons-nous utiliser efficacement le langage Go pour la programmation ? 1. Utiliser pleinement les fonctionnalités de concurrence du langage Go Le modèle de concurrence du langage Go est l'une de ses fonctionnalités les plus importantes via goroutine et.

Systèmes distribués et verrouillage optimiste en langage Go Systèmes distribués et verrouillage optimiste en langage Go Jun 03, 2023 am 08:02 AM

Le langage Go est un langage de programmation efficace de plus en plus utilisé dans les systèmes distribués. Dans le même temps, le mécanisme de verrouillage optimiste est également devenu un outil important permettant aux développeurs de résoudre les problèmes de concurrence. Cet article explorera les systèmes distribués et le verrouillage optimiste dans le langage Go. 1. Qu'est-ce qu'un système distribué ? Le système distribué fait référence à un système composé de plusieurs ordinateurs connectés les uns aux autres via un réseau pour effectuer des tâches ensemble. Les systèmes distribués peuvent améliorer la fiabilité et le débit du système. en distribution

Comment utiliser le langage Go pour écrire le module de gestion du temps de travail des livreurs dans le système de cuisine en porte-à-porte ? Comment utiliser le langage Go pour écrire le module de gestion du temps de travail des livreurs dans le système de cuisine en porte-à-porte ? Nov 02, 2023 am 11:13 AM

Comment utiliser le langage Go pour écrire le module de gestion du temps de travail des livreurs dans le système de cuisine en porte-à-porte ? Avec le développement fulgurant du marché des plats à emporter, le système de cuisine en porte-à-porte est également devenu un choix pratique dans la vie des gens. Dans le système de cuisine en porte-à-porte, le livreur est un élément crucial. Une bonne gestion du temps de travail est très importante pour l’efficacité du travail du personnel de livraison et l’expérience utilisateur. Cet article explique comment utiliser le langage Go pour écrire le module de gestion du temps de travail du personnel de livraison dans le système de cuisine en porte-à-porte et fournit des exemples de code spécifiques. Analyse de la demande Dans le système de cuisson en porte-à-porte, le personnel de livraison doit généralement

Comment résoudre le problème de traversée du répertoire du système de fichiers des fichiers simultanés en langage Go ? Comment résoudre le problème de traversée du répertoire du système de fichiers des fichiers simultanés en langage Go ? Oct 09, 2023 am 10:49 AM

Comment résoudre le problème de traversée du répertoire du système de fichiers des fichiers simultanés en langage Go ? Dans le développement quotidien, nous devons souvent parcourir des fichiers dans le système de fichiers. Dans le langage Go, en utilisant les fonctionnalités de goroutine et de canal, nous pouvons facilement effectuer une traversée simultanée des répertoires du système de fichiers. Tout d’abord, nous devons introduire le package filepath et le package os pour effectuer les opérations liées au système de fichiers. Le code spécifique est le suivant : import("fmt"

Comment utiliser le langage Go pour écrire le module de gestion des comptes utilisateurs dans le système de cuisine en porte-à-porte ? Comment utiliser le langage Go pour écrire le module de gestion des comptes utilisateurs dans le système de cuisine en porte-à-porte ? Nov 01, 2023 pm 02:10 PM

Comment utiliser le langage Go pour écrire le module de gestion des comptes utilisateurs dans le système de cuisine en porte-à-porte ? Dans la vie moderne et trépidante, de plus en plus de personnes choisissent de résoudre leurs problèmes alimentaires grâce à des services de cuisine à domicile. Pour ce prestataire de services, un système de gestion de compte utilisateur complet et solide est très important. Cet article présentera comment utiliser le langage Go pour écrire un module de gestion de compte utilisateur, visant à aider les fournisseurs de services de cuisine à domicile à mieux gérer les informations de compte des utilisateurs et fournira des exemples de code spécifiques. 1. Créez une table de base de données. Vous devez d'abord créer un utilisateur.

Comment utiliser le langage Go pour écrire le module de recharge de compte utilisateur dans le système de cuisson en porte-à-porte ? Comment utiliser le langage Go pour écrire le module de recharge de compte utilisateur dans le système de cuisson en porte-à-porte ? Nov 01, 2023 am 08:41 AM

À mesure que le marché des plats à emporter mûrit, la cuisine maison est devenue le premier choix de nombreuses familles pour le dîner. En tant que fournisseur de services de cuisine à domicile, il est essentiel de fournir une recharge fiable du compte utilisateur. Cet article explique comment utiliser le langage Go pour écrire le module de recharge de compte utilisateur dans le système de cuisson porte-à-porte. 1. Conception Lors de la conception du module de recharge, nous devons prendre en compte les aspects suivants : La structure de données à utiliser se trouve dans le module de recharge, et nous devons stocker le solde de l'utilisateur avant et après la recharge. Par conséquent, nous pouvons utiliser la structure de données suivante : typeAccount

See all articles