ホームページ >バックエンド開発 >Golang >Go言語とJavaの違いは何ですか?

Go言語とJavaの違いは何ですか?

青灯夜游
青灯夜游オリジナル
2022-12-14 19:15:0814957ブラウズ

違い: 1. Go は関数のオーバーロードを許可しませんが、Java は許可します; 2. Java はデフォルトでポリモーフィズムを許可しますが、Go は許可しません; 3. Go はルーティング設定に HTTP プロトコルを使用しますが、Java は許可しません; 4. Go コード自動的に複数のコアに拡張できるが、Java には必ずしも十分なスケーラビリティがあるとは限りません; 5. Java オブジェクトのメソッドには渡すための隠された this ポインタがありますが、Go にはありません; 6. Java は多重継承をサポートしていませんが、Go は多重継承をサポートしています; 7 .GO は非侵入型インターフェイスを使用しますが、Java は使用しません。

Go言語とJavaの違いは何ですか?

このチュートリアルの動作環境: Windows7 システム、GO 1.18&&Java8 バージョン、Dell G3 コンピューター。

1. Java について

1. Java の使用

まず、 Java の主な用途とアプリケーション シナリオ:

  • 用途 1: サーバー バックエンド システム開発 (Web バックエンド、マイクロサービス バックエンド決済システム、ビジネス システム、管理バックエンド、さまざまなバックエンド インタラクション インターフェイス サービス)。

  • 使用 2: ビッグ データ フレームワークと Java API サポートの基礎となる実装。 (ハドゥープ)。

  • 3 つの使用: 他のミドルウェアの基礎となる開発。 (Tomcat、RocketMq、Hbase、Kafka (一部)、SpringCloud、Dubbo...)。

#2. Java のメリットと特徴

  • サーバーシステムは高いパフォーマンスを持っています。

  • クロスプラットフォームの仮想マシンがあります。

  • 強力な機能を備え、多くのクラス ライブラリをサポートし、多くのエコシステム クラス ライブラリを備えているため、開発フレームワークやツールを見つけやすくなっています。

  • 市場シェアは高く、中国のプログラマーの約 60% が Java 関連の仕事をしています。

2. Go について

1. Go の誕生の理由

Go 言語は Google 社内の上司によって開発されました。主な理由は、Google には C プログラムのプロジェクトが多数ありますが、開発効率が低すぎてメンテナンスコストが高いため、改善するために Go 言語が開発されたためです。効率が悪く、パフォーマンスが少し悪いだけです。

(Go は 2007 年に開発され、2009 年にリリースされました)

2. Go と Java の違いの巨視的な視点

  • 仮想マシンはありません、クロスプラットフォームではありません (ここでのプラットフォームはオペレーティング システムを指します) (複数のプラットフォームを実行でき、各プラットフォームには異なるバイナリ パッケージがあります)、サーバー オペレーティング システムのバージョン (Windows) に対応する実行可能プログラムにパッケージ化してコンパイルする必要があります。 /linux) (たとえば、Windows は exe)。 (注: Go クロスプラットフォームとは、32 ビットと 64 ビットのオペレーティング システム間のクロスプラットフォームを指します)

  • Go プログラムはオペレーティング システムの実行可能ファイルに直接パッケージ化されているため、仮想マシンは中間変換層にあるため、理論的には実行効率が高くなります (理論的には高くなりますが、実際の状況では特定の分析が必要です)。

  • Java の言語とコーディング スタイルと比較すると、Go はより簡潔で、より少ないコードで同じ機能を実現できます。

  • Go 言語の最下層も C で実装されており、高い同時実行性を備えて設計されています (Java が誕生したとき (1995 年))、マルチコア CPU はありませんでした。同時実行サポートは後から追加されましたが、Go (2009) はすでにマルチコア CPU を搭載したコンピューターで誕生しました。言語を設計する際には、マルチコア CPU のパフォーマンスを最大限に活用しました (Intel は、 2005 年に初めて)、高いパフォーマンスと高同時実行性のサポートを備えています (このうち高同時実行性サポートとは、マルチコア CPU のパフォーマンス リソースを最大限に活用することを指します。たとえば、go プログラムは、すべての CPU をデフォルト (使用する数を設定しない限り))。

  • は、ブロックチェーン システム (イーサリアム基盤システム、イーサリアム上位層アプリケーションなど)、クラウド コンピューティング、コンテナー (Docker、K8s 基盤など) などの特定のシステムの開発に当然適しています。 (すべて go で開発)(大企業の自社開発運用保守管理プロジェクトの多くも基盤開発に go を使用)、ネットワークプログラミング(Java の Netty に似ています)。

#3. Go 言語と Java の具体的な違い

1. 関数のオーバーロード

関数Go ではオーバーロードは許可されていないため、メソッドと関数には一意の名前を付ける必要があります。 Java では関数のオーバーロードが可能です。

2. ポリモーフィズム

Java ではデフォルトでポリモーフィズムが許可されています。しかし、Go はそうではありません。

Java のポリモーフィック実装は原則に従います。スーパークラス オブジェクト参照変数がサブクラス オブジェクトを参照する場合、参照変数の型ではなく、参照されるオブジェクトの型によって、どのメンバー メソッドが呼び出されるかが決まります。呼び出されるメソッドはスーパークラスで定義されている必要があります。つまり、サブクラスによってオーバーライドされるメソッドです。 Java のポリモーフィズムは、継承ベースとインターフェイスベースの 2 つの方法で実現できます。

Go 言語は通常、さまざまなタイプの代入を許可しません。つまり、従来のポリモーフィズムをサポートしません。インターフェイスは例外であり、さまざまな型を割り当てることができます。型がインターフェイスを実装している限り、その型の変数をインターフェイスの変数に割り当てることができます。

3. ルーティング設定

Go 言語はルーティング設定に HTTP プロトコルを使用しますが、Java はルーティング設定に Akka.routing.ConsistentHashingRouter と Akka.routing.ScatterGatherFirstCompletedRouter を使用します。

4. スケーラビリティ

Go コードは複数のコアに自動的にスケーリングできますが、Java は常に十分なスケーラビリティを備えているわけではありません。

5. オブジェクト転送:

Java のオブジェクト メソッドは、隠された this ポインタで渡されますが、Go 言語のオブジェクト指向は単に別の文法形式で表現されます。隠された this ポインタはありません。つまり、メソッドによって課されたターゲットが渡されます。明示的に、隠蔽されていません。また、メソッドが適用するターゲットは必ずしもポインタである必要はありません(Java はオブジェクトへのポインタを渡します)、ポインタの場合は this という名前を付ける必要はありません。

6. 継承:

Java の継承は extends キーワードによって完了し、多重継承はサポートしません。 Go 言語の継承は匿名構成によって完了します。基底クラスは Struct の形式で定義され、サブクラスは基底クラスをサブクラスの定義のメンバーとして置くだけでよく、メモリ レイアウトは調整によって変更できます。基本クラスのメンバーの位置、多重継承をサポートします。

7. インターフェイス:

Java のインターフェイスは、さまざまなコンポーネントのコントラクトとして存在し、必須です。クラスは、インターフェイスを実装し、インターフェイスから継承する必要があることを宣言する必要があります。名前が異なるだけで同一のインターフェースが 2 つある場合でも、そのクラスがそのインターフェースを実装しているかどうかは、クラスが宣言した実装インターフェースにそのインターフェースが含まれているかどうかによってのみ判断でき、これを「侵入型」インターフェースと呼びます。

GO 言語は非侵入的なインターフェイスを使用します。クラスはインターフェイスに必要なすべての関数を実装するだけでよく、その場合、クラスがインターフェイスを実装すると言います。 GO 言語は、インターフェイスを介してインターフェイス クエリ (インターフェイスが指すオブジェクトが別のインターフェイスを実装しているかどうか)、型クエリなどを実行できます。

【関連する推奨事項: Go ビデオ チュートリアル プログラミング教育

以上がGo言語とJavaの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。