Maison  >  Article  >  développement back-end  >  Quelles sont les différences entre le langage Go et Java ?

Quelles sont les différences entre le langage Go et Java ?

青灯夜游
青灯夜游original
2022-12-14 19:15:0814909parcourir

Différences : 1. Go n'autorise pas la surcharge de fonctions, contrairement à Java ; 2. Java autorise le polymorphisme par défaut, Go ne le permet pas ; 3. Go utilise le protocole HTTP pour la configuration du routage, Java ne le permet pas ; 4. Le code Go peut être automatiquement étendu ; vers plusieurs cœurs, et Java n'a pas toujours une évolutivité suffisante ; 5. Les méthodes d'objet Java transmettent ces pointeurs cachés, Go ne le fait pas ; 6. Java ne prend pas en charge l'héritage multiple et Go prend en charge l'héritage multiple ; Interface intrusive, ce que Java n'est pas.

Quelles sont les différences entre le langage Go et Java ?

L'environnement d'exploitation de ce tutoriel : système windows7, version GO 1.18&&java8, ordinateur Dell G3.

1. À propos de Java

1. Les utilisations de Java

Tout d'abord, passons en revue les principales utilisations et scénarios d'application de Java :

  • Utilisation 1 : Développement du système back-end du serveur (back-end Web, système de paiement back-end de microservices, système d'entreprise, back-end de gestion, divers services d'interface interactive back-end).

  • Utilisation 2 : l'implémentation sous-jacente du framework Big Data et la prise en charge de l'API Java. (Hadoop).

  • Utilisez-en trois : développement sous-jacent d'autres middlewares. (Tomcat, RocketMq, Hbase, Kafka (en partie), SpringCloud, Dubbo...).

2. Avantages et fonctionnalités de Java

  • Le système serveur a des performances élevées.

  • Il existe une machine virtuelle et elle est multiplateforme.

  • Il possède des fonctions puissantes, prend en charge de nombreuses bibliothèques de classes, possède de nombreuses bibliothèques de classes d'écosystème et facilite la recherche des cadres et des outils de développement.

  • Part de marché élevée, environ 60 % des programmeurs chinois effectuent un travail lié à Java.

2. À propos de Go

1. La raison pour laquelle Go est né

Le langage Go a été développé par les dirigeants internes de l'entreprise Google. La raison principale est que Google dispose d'un grand nombre de programmes C. projets, mais le développement L'efficacité était trop faible et le coût de maintenance était élevé, le langage Go a donc été développé pour améliorer l'efficacité, et les performances n'étaient que légèrement pires.

(Go a été développé en 2007 et lancé en 2009)

2. Une vue macroscopique des différences entre Go et Java

  • Pas de machine virtuelle, pas de multiplateforme (la plateforme fait ici référence au système d'exploitation) ( peut exécuter plusieurs plates-formes (des packages binaires différents pour chaque plate-forme), qui doivent être empaquetés et compilés dans un programme exécutable (par exemple, Windows est exe) correspondant à la version du système d'exploitation du serveur (windows/linux). (Remarque : Go multiplateforme fait référence à multiplateforme entre des systèmes d'exploitation identiques 32 bits et 64 bits)

  • Étant donné que les programmes Go sont directement intégrés dans les fichiers exécutables du système d'exploitation, il n'y a pas de couche de conversion de machine virtuelle au milieu. , donc théoriquement l'efficacité d'exécution sera plus élevée (théoriquement plus élevée, la situation réelle nécessite une analyse spécifique).

  • Comparé au langage et au style de codage de Java, Go est plus concis et peut réaliser la même fonction avec moins de code.

  • La couche inférieure du langage Go est également implémentée en C, et elle est conçue avec une concurrence élevée (lorsque Java est né (1995), il n'y avait pas de processeurs multicœurs, donc sa prise en charge de la concurrence a été ajoutée plus tard, et il était déjà là lorsque Go (2009) est né) Pour les ordinateurs équipés de processeurs multicœurs, le langage est conçu pour tirer pleinement parti des performances des processeurs multicœurs (Intel a introduit le multicœur pour la première fois en 2005), il a donc une haute performances et prise en charge de la concurrence élevée (l'une des prises en charge de la concurrence élevée fait référence à l'utilisation complète des processeurs multicœurs) Ressources de performances, telles que le programme go utilisant tous les processeurs par défaut (sauf si vous définissez le nombre à utiliser)).

  • Naturellement adapté au développement de certains systèmes spécifiques, tels que les systèmes blockchain (tels que le système sous-jacent Ethereum, les applications de couche supérieure Ethereum), le cloud computing et les conteneurs (Docker, la couche inférieure K8 sont tous développés par Go) (la plupart des projets de gestion d'exploitation et de maintenance auto-développés par les grandes entreprises utilisent le développement sous-jacent), la programmation réseau (similaire à Netty de Java).

3. Différences spécifiques entre le langage Go et Java

1. Surcharge de fonctions

La surcharge de fonctions n'est pas autorisée sur Go, et les méthodes et fonctions doivent avoir des noms uniques. Java permet la surcharge de fonctions.

2. Polymorphisme

Java autorise le polymorphisme par défaut. Cependant, Go ne le fait pas.

L'implémentation du polymorphisme en Java suit un principe : lorsqu'une variable de référence d'objet de superclasse fait référence à un objet de sous-classe, le type de l'objet référencé plutôt que le type de la variable de référence détermine quelle méthode membre est appelée, mais la méthode appelée doit Elle est définie dans la super classe, c'est-à-dire que la méthode est remplacée par la sous-classe. Le polymorphisme en Java peut être obtenu grâce à deux méthodes : basée sur l'héritage et basée sur l'interface.

Le langage Go ne permet généralement pas différents types d'affectations, c'est-à-dire qu'il ne prend pas en charge le polymorphisme traditionnel. L'interface est une exception et peut être affectée à différents types Tant qu'un type implémente l'interface, nous pouvons attribuer des variables de ce type aux variables de l'interface.

3. Configuration du routage

Le langage Go utilise le protocole HTTP pour la configuration du routage ; tandis que Java utilise Akka.routing.ConsistentHashingRouter et Akka.routing.ScatterGatherFirstCompletedRouter pour la configuration du routage.

4. Évolutivité

Le code Go peut automatiquement s'adapter à plusieurs cœurs, cependant, Java n'est pas toujours suffisamment évolutif.

5. Transfert d'objet :

Les méthodes objet en Java seront transmises avec un pointeur this masqué, tandis que les méthodes orientées objet dans le langage Go sont simplement exprimées sous une forme grammaticale différente. Il n'y a pas de pointeur this caché, c'est-à-dire que la cible imposée par la méthode est passée explicitement et. n'est pas caché. De plus, la cible appliquée par la méthode n'est pas nécessairement un pointeur (java passe un pointeur vers un objet, s'il s'agit d'un pointeur, il n'est pas nécessaire de le nommer ainsi).

6. Héritage :

L'héritage en Java s'effectue via le mot-clé extends et ne prend pas en charge l'héritage multiple. L'héritage dans le langage Go s'effectue par composition anonyme : la classe de base est définie sous la forme de Struct, et la sous-classe n'a besoin que de mettre la classe de base en tant que membre dans la définition de la sous-classe, et la disposition de la mémoire peut être modifiée en ajustant la position des membres de la classe de base, prenant en charge l'héritage multiple.

7. Interface :

Les interfaces en Java existent sous forme de contrats dans différents composants et sont obligatoires. La classe doit déclarer qu'elle implémente une certaine interface et doit hériter de l'interface. Même s'il existe deux interfaces identiques mais uniquement des noms différents, la question de savoir si la classe implémente l'interface ne peut être déterminée que si l'interface d'implémentation déclarée par la classe inclut l'interface. C'est ce qu'on appelle une interface « intrusive ».

Le langage GO utilise une interface non intrusive. Une classe doit seulement implémenter toutes les fonctions requises par l'interface, on dit alors que la classe implémente l'interface. Le langage GO peut effectuer une requête d'interface (si l'objet pointé par l'interface implémente une autre interface), taper une requête, etc. via l'interface.

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

Déclaration:
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