Heim >Backend-Entwicklung >Golang >Was sind die Unterschiede zwischen Go-Sprache und Java?

Was sind die Unterschiede zwischen Go-Sprache und Java?

青灯夜游
青灯夜游Original
2022-12-14 19:15:0814957Durchsuche

Unterschiede: 1. Go erlaubt keine Funktionsüberladung, Java schon; 2. Java erlaubt standardmäßig Polymorphismus, Go nicht; 3. Go verwendet HTTP-Protokoll für die Routing-Konfiguration, 4. Go-Code kann automatisch erweitert werden zu mehreren Kernen, und Java verfügt nicht immer über ausreichende Skalierbarkeit; 5. Java-Objektmethoden übergeben diese Zeiger nicht; 6. Java unterstützt keine Mehrfachvererbung, Go unterstützt Mehrfachvererbung; Schnittstelle, was Java nicht ist.

Was sind die Unterschiede zwischen Go-Sprache und Java?

Die Betriebsumgebung dieses Tutorials: Windows7-System, GO 1.18 und Java8-Version, Dell G3-Computer. 1. Über Java 1. Die Verwendungsmöglichkeiten von Java (Web-Backend, Microservice-Backend-Zahlungssystem, Geschäftssystem, Management-Backend, verschiedene interaktive Backend-Schnittstellendienste).

Verwendung 2: Die zugrunde liegende Implementierung des Big-Data-Frameworks und Java-API-Unterstützung. (Hadoop).

Verwenden Sie drei: zugrunde liegende Entwicklung anderer Middleware. (Tomcat, RocketMq, Hbase, Kafka (teilweise), SpringCloud, Dubbo...).

  • 2. Vorteile und Funktionen von Java

  • Das Serversystem verfügt über eine hohe Leistung.

  • Es gibt eine virtuelle Maschine und sie ist plattformübergreifend.


  • Es verfügt über leistungsstarke Funktionen, unterstützt viele Klassenbibliotheken und verfügt über viele Ökosystem-Klassenbibliotheken, wodurch Entwicklungsframeworks und -tools leichter zu finden sind.

Hoher Marktanteil, etwa 60 % der chinesischen Programmierer erledigen Java-bezogene Arbeiten.

  • 2. Über Go
  • 1. Der Grund, warum Go geboren wurde

  • Die Go-Sprache wurde von den internen Firmenchefs von Google entwickelt Projekte, aber die Entwicklung Die Effizienz war zu gering und die Wartungskosten hoch. Daher wurde die Go-Sprache entwickelt, um die Effizienz zu verbessern, und die Leistung war nur geringfügig schlechter.
  • (Go wurde 2007 entwickelt und 2009 eingeführt)

  • 2. Eine makroskopische Sicht auf die Unterschiede zwischen Go und Java

Keine virtuelle Maschine, keine plattformübergreifende Plattform (die Plattform bezieht sich hier auf das Betriebssystem) ( kann mehrere Plattformen ausführen (unterschiedliche Binärpakete für jede Plattform), die in ein ausführbares Programm (z. B. Windows ist exe) gepackt und kompiliert werden müssen, das der Server-Betriebssystemversion (Windows/Linux) entspricht. (Hinweis: Go plattformübergreifend bezieht sich auf plattformübergreifende 32-Bit- und 64-Bit-identische Betriebssysteme)

Da Go-Programme direkt in ausführbare Dateien des Betriebssystems gepackt werden, gibt es in der Mitte keine Konvertierungsschicht für virtuelle Maschinen Daher ist die Ausführungseffizienz theoretisch höher (theoretisch höher, die tatsächliche Situation erfordert eine spezifische Analyse).

Im Vergleich zur Sprache und zum Codierungsstil von Java ist Go prägnanter und kann die gleiche Funktion mit weniger Code erreichen.

Die unterste Ebene der Go-Sprache ist ebenfalls in C implementiert und auf hohe Parallelität ausgelegt (als Java geboren wurde (1995), gab es keine Multi-Core-CPUs, daher wurde die Unterstützung für Parallelität erst später hinzugefügt war bereits vorhanden, als Go (2009) geboren wurde) Computer mit Multi-Core-CPUs nutzen die Leistung von Multi-Core-CPUs voll aus (Intel führte Multi-Core 2005 zum ersten Mal ein, als die Sprache entworfen wurde), also haben sie es getan Unterstützung für hohe Leistung und hohe Parallelität (eine der Unterstützung für hohe Parallelität bezieht sich auf die vollständige Nutzung von Multi-Core-CPUs) Leistungsressourcen, z. B. das Go-Programm, das standardmäßig alle CPUs verwendet (es sei denn, Sie legen fest, wie viele verwendet werden sollen)).

  • Natürlich geeignet für die Entwicklung einiger spezifischer Systeme, wie Blockchain-Systeme (wie das zugrunde liegende System von Ethereum, Anwendungen der oberen Schicht von Ethereum), Cloud Computing und Container (Docker und die untere Schicht von K8 werden alle von Go entwickelt) (Die meisten der selbst entwickelten Betriebs- und Wartungsmanagementprojekte großer Unternehmen nutzen Go für die zugrunde liegende Entwicklung), Netzwerkprogrammierung (ähnlich Javas Netty).

  • 3. Spezifische Unterschiede zwischen Go-Sprache und Java
  • 1. Funktionsüberladung ist in Go nicht zulässig und Methoden und Funktionen müssen eindeutige Namen haben. Java ermöglicht das Überladen von Funktionen.
  • 2. Polymorphismus

  • Java erlaubt standardmäßig Polymorphismus. Go jedoch nicht.
  • Die Implementierung des Polymorphismus in Java folgt einem Prinzip: Wenn eine Referenzvariable eines Oberklassenobjekts auf ein Unterklassenobjekt verweist, bestimmt der Typ des referenzierten Objekts und nicht der Typ der Referenzvariable, welche Mitgliedsmethode aufgerufen wird, aber die aufgerufene Methode muss Sie ist in der Oberklasse definiert, das heißt, die Methode wird von der Unterklasse überschrieben. Polymorphismus in Java kann durch zwei Methoden erreicht werden: vererbungsbasiert und schnittstellenbasiert.

  • Die Go-Sprache erlaubt im Allgemeinen keine unterschiedlichen Arten von Zuweisungen, das heißt, sie unterstützt keinen traditionellen Polymorphismus. Die Schnittstelle ist eine Ausnahme und kann verschiedenen Typen zugewiesen werden. Solange ein Typ die Schnittstelle implementiert, können wir Variablen dieses Typs Variablen der Schnittstelle zuweisen.

3. Routing-KonfigurationDie Go-Sprache verwendet das HTTP-Protokoll für die Routing-Konfiguration, während Java Akka.routing.ConsistentHashingRouter und Akka.routing.ScatterGatherFirstCompletedRouter für die Routing-Konfiguration verwendet. 4. Skalierbarkeit

Go-Code kann automatisch auf mehrere Kerne skaliert werden; Java ist jedoch nicht immer skalierbar genug.

5. Objektübertragung:

Objektmethoden in Java verfügen über einen versteckten Zeiger, während objektorientierte Methoden in der Go-Sprache nur in einer anderen grammatikalischen Form ausgedrückt werden. Es gibt keinen versteckten Zeiger, das heißt, das von der Methode vorgegebene Ziel wird explizit übergeben nicht versteckt. Darüber hinaus ist das von der Methode angewendete Ziel nicht unbedingt ein Zeiger (Java übergibt einen Zeiger auf ein Objekt. Wenn es sich um einen Zeiger handelt, muss er nicht so genannt werden).

6. Vererbung:

Die Java-Vererbung wird über das Schlüsselwort „extens“ abgeschlossen und unterstützt keine Mehrfachvererbung. Die Vererbung in der Go-Sprache wird durch anonyme Zusammensetzung abgeschlossen: Die Basisklasse wird in Form von Struct definiert, und die Unterklasse muss nur die Basisklasse als Mitglied in die Definition der Unterklasse einfügen, und das Speicherlayout kann durch Anpassen geändert werden die Position der Basisklassenmitglieder, die Mehrfachvererbung unterstützen.

7. Schnittstelle:

Schnittstellen existieren in verschiedenen Komponenten und sind obligatorisch. Die Klasse muss deklarieren, dass sie eine bestimmte Schnittstelle implementiert und von der Schnittstelle erben muss. Auch wenn es zwei identische Schnittstellen, aber nur unterschiedliche Namen gibt, kann nur anhand der Tatsache bestimmt werden, ob die von der Klasse deklarierte Implementierungsschnittstelle die Schnittstelle enthält. Dies wird als „aufdringliche“ Schnittstelle bezeichnet.

Die GO-Sprache verwendet eine nicht aufdringliche Schnittstelle. Eine Klasse muss nur alle für die Schnittstelle erforderlichen Funktionen implementieren. Dann sagen wir, dass die Klasse die Schnittstelle implementiert. Die GO-Sprache kann Schnittstellenabfragen (ob das Objekt, auf das die Schnittstelle zeigt, eine andere Schnittstelle implementiert), Typabfragen usw. über die Schnittstelle durchführen.

【Verwandte Empfehlungen: Go-Video-Tutorial, Programmierunterricht

Das obige ist der detaillierte Inhalt vonWas sind die Unterschiede zwischen Go-Sprache und Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn