Go言語の欠点は何ですか?

青灯夜游
リリース: 2022-12-21 19:36:38
オリジナル
7144 人が閲覧しました

Go 言語の欠点: 1. 技術的なルートの選択によって引き起こされる「パフォーマンスの不利」 Go は GC プログラミング言語です。パフォーマンスが非常に重要な状況では、選択する際には依然として注意が必要です。行く。 2. 「単一式メソッド」と明示的なエラー処理は少し「時代遅れ」です 3. 最小バージョンでは MVS が選択されており、主流から逸脱しています 4. Go コア チームは言語の進化を完全に制御しており、今後も変更されることはありませんコミュニティの大多数によって承認されました。Go 言語に採用され追加されたことにより、コミュニティ内で不利な結果が生じ、Go コミュニティと Go コア チームの間に「亀裂」が生じました。5. 機能が弱い。

Go言語の欠点は何ですか?

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

各プログラミング言語には独自の長所と短所があり、Go はGo の「メリット」と「デメリット」を列挙してみましょう。「デメリット」:

Go のメリット

1. シンプルで簡単学習するには

Go 言語の構文は単純で、C 言語の構文に似た要素が含まれています。読者がすでに 2 ~ 3 つのプログラミング言語を習得している場合、Go 言語を習得するのに数日しかかかりません。言語. 新しい開発者でも数週間で高パフォーマンスの Go 言語を作成できます. 言語プログラム.

2. 無料で効率的です

#Go 言語のコンパイル速度はそれよりも大幅に優れていますJavaとCの言語であり、C言語に近い動作効率とPHPに近い開発効率を兼ね備えており、動作効率と開発効率を見事に融合させたGo言語と言えます。 Go 言語は、手続き型プログラミング、オブジェクト指向プログラミング、インターフェイス指向プログラミング、関数型プログラミングなど、現在のプログラミング パラダイムもすべてサポートしています。開発者はニーズに応じて自由に組み合わせることができます。

3. 強力な標準ライブラリ

Go の標準ライブラリは非常に安定しており、ネットワーク、システム、暗号化、エンコード、グラフィックスなどの側面を含む豊富で多様性があり、特に開発者がサードパーティにほとんど依存する必要がない非常に実用的なネットワークおよびシステム ライブラリです。

4. 簡単な導入

仮想マシン不要、Go言語 コードをバイナリ実行ファイルとして直接出力可能 さらにGo言語には独自のリンカーがあり、システムが提供するコンパイラやリンカーに依存しません。したがって、コンパイルされたバイナリ実行可能ファイルは、ほぼすべてのシステム環境で実行できます。

5. 同時実行のネイティブ サポート

Go 言語は、言語層から同時実行性をネイティブにサポートしており、非常に使いやすい非常に効率的な言語です。Go 言語の同時実行性は、スレッドに似ていますが、スレッドではなく、軽量のスレッド指向メソッドである Goroutine に基づいています。 Go 言語のゴルーチン作成コストは非常に低く、追加メモリは数千バイトだけです。

通常、通常のデスクトップ ホストは数百のスレッドを実行します。1 つのスレッドは過負荷になりますが、同じホストでは数千バイトのスレッドが実行される可能性があります。ゴルーチンはチャネルを介して通信でき、ゴルーチンとチャネルベースの同時実行メソッドにより、CPU リソースの使用を最大限に活用できます。

6. 強力な安定性

Go 言語には、強力なコンパイル チェック、厳格なコーディング標準、および強力な安定性があり、さらに、ソフトウェア ライフ サイクル (開発、テスト、デプロイメント、メンテナンスなど) も提供されます。 、など)、例: go tools、go fmt、go test など。

7. ガベージ コレクション

Go 言語を開発に使用する場合、メモリに関しては、開発者はメモリの適用のみに注意を払う必要があり、メモリのリリースについて心配する必要はありません。 Go 言語にはランタイムが組み込まれており、メモリを自動的に管理するために使用されます。 GC (Garbage Collection、ガベージコレクション機構) は現時点では完璧ではありませんが、開発中に遭遇するほとんどの状況に十分に対応できるため、開発者はよりビジネスに集中することができます。最適化されました。

Go の欠点

1. 技術的なルート選択による「パフォーマンス上の欠点」ご存知のとおり、Go はゴミだらけ これはリサイクルプログラミング言語なので、Go の STW (Stop The World) 時間がどれほど短く、GC 遅延がどれほど小さくても、やはり GC クラスのプログラミング言語に属し、Java や Java と同じ陣営に属します。 C# と同時に、当然のことながら C と関連しており、C とメモリを手動で管理し、ランタイム GC の負担がない Rust のようなプログラミング言語との間には明確な線が引かれています。 Go 言語の本来の目的はシステムレベルのプログラミング言語になることですが、Go の実行時のパフォーマンスは 99.99% のニーズを満たすことができますが、Baidu の何兆ものトラフィック [転送エンジン BFE]、時系列データベース [influxdb]、分散リレーショナル データベース [ TiDB ] やその他のパフォーマンス重視のプロジェクトは Go で実装することを選択していますが、パフォーマンスが非常に重視される状況では、Go を選択するときに依然として注意が必要であることは否定できません。

2 独自の設計思想に固執することで生じる「表現上のデメリット」

1) 「単一」の表現方法

他言語から乗り換える開発者が多いGo 陣営へ スタッフは、Go にはトリックが少なすぎ、ルーチンもあまりないと不満を述べました。Go が「表現上の欠点」を示した理由は、その設計哲学の原則に由来します。事。"この原則は、一部の開発者が自分のスキルを誇示したいという心理的ニーズを満たしていないため、Go は平凡な資格を持つプログラマーのみが使用できる言語として批判されています。

[Go 1.18 ではジェネリックス (型パラメータ) が追加されます]。これは、そのような「欠点」を「補う」ものと考えることができます。しかし、Go の価値観や設計哲学を長年認識してきた私たち Gopher にとって、Go の表現力を大幅に向上させた [ジェネリック] がトリックやトリックの「温床」になるのではないかと非常に懸念しています。

2) 「時代遅れの」明示的なエラー処理

Go 言語は誕生以来、C などの主流のプログラミング言語のような例外ベースの構造を提供していませんでした。 Java、Python の場合、Go 設計者は、try-catch-finally エラー処理メカニズムの代わりに、例外をプログラム制御構造に結合するとコードの混乱が生じると考えています。 Go は、エラー値の比較に基づいたシンプルなエラー処理メカニズムを提供しており、これにより、すべての Go 開発者が各エラーに明示的に注意を払い、処理することが「強制」されます。明示的なエラー処理を備えたコードは、より堅牢になります。また、Go 開発者は、コード。しかし、この設計哲学の固執は、他の言語の多くの開発者から「時代遅れ」と嘲笑され、「半世紀前の古いメカニズム」と呼ばれてきました。 (著者注: 1970 年代に C 言語が誕生したときに使用されたエラー処理メカニズム)

Go 開発チームも「動揺」しており、Go 開発チームは Go2 のリリース後、複数のバージョンをリリースしました。 plan [エラー処理のための新しいメカニズムの草案を作成する]。 Go コミュニティでも、この問題について長い議論があり、「口論」さえありました。著名な Gopher である Dave Cheney 氏、Rob Pike 氏、そして有名な Go トレーナーであり、『Go Language Practical』の共著者である William Kennedy 氏が発言しました。戦闘」 Go チームの Try 提案が発表された後、Go チームは Try 計画に反対する公開書簡を Go コミュニティに公開しました。最終的には Go の設計思想を主張するグループが優勢となり、Try 提案は拒否され、 [Go 1.13 バージョン] には含まれていませんでした!

3. 主流から逸脱した「ニッチな欠点」

Go のパッケージ依存関係管理メカニズムの初期設計には、かなりの数の「欠陥」があり、これは内部の大規模な内部コード ウェアハウスに起因します。 Google とトランクの開発モデルの影響。 Google 以外の Go 言語にはさまざまな側面からの声があり、Go パッケージ管理メカニズムは長い間コミュニティのニーズを満たすことができませんでした。その結果、[ベンダーメカニズム]や[dep]などのパッケージの依存関係管理を改善する試みが行われてきました。

2018 年の初め、ほとんどの Gopher が dep が「自然に」公式 Go ツールチェーンの一部にアップグレードされるだろうと考えていたとき、Go コアチームの技術リーダーであり、初期メンバーの 1 人である Russ Cox は、 Go コア チームのメンバー 彼は個人ブログで [7 つの記事] を継続的に公開し、「パッケージ依存関係管理」に対する Go チームの技術的ソリューションを体系的に説明しました: [vgo] (go モジュールの前身)。

vgo の主なアイデアには、セマンティック インポートのバージョニングと最小バージョンの選択が含まれます。これらは、主流のプログラミング言語、特に新しい [最小バージョンの選択 (MVS)] の現在のパッケージ依存関係管理ルールに反しています。主流から逸脱しつつある!

4. Go コアチームの「民主集中主義」によって引き起こされる「コミュニティの不利益」

は、Rust チームが「言語機能を増やす」ためにコミュニティの提案を広範に採用することとは異なります。Go は次のようなものです。別の極端: Go コア チームは言語の進化を完全に制御します。コミュニティの大多数が同意しない限り、Go 言語は間違いなく採用され、Go 言語に追加されます。私は冗談めかしてこれを「民主集中主義」と呼んでいます。実際の投票権は Go にあり、コア チームはコミュニティ内の少数の人々を代表します。

2018年初頭のdepとvgoの紛争は、この「不利な点」の典型的な現れです。コミュニティが 1 年以上にわたって懸命に構築してきた dep プロジェクトは、Russ Cox とそれに集中して時間を費やした他の数人の人々によって設計された vgo によって「絞り出されました」。依存関係管理ツールの標準は、Go モジュールの成功への「足がかり」となっています。たとえ Go モジュールを使用するという Go チームの決定が正しかったことが判明したとしても、これによって Go コミュニティと Go コアチームの間に生じた「亀裂」は確かに存在するため、過去 2 年間、Go コアチームはGo コミュニティとの関係を改善し、Go 提案の提案、レビュー、承認のプロセスを標準化および透明化することは困難です。

5. 総攻撃失敗後、期待外れによる「機能的弱点」

Go 1.5 のリリース後、Go は次のような理由で大きな注目を集めています。ブートストラッピングと GC 遅延が大幅に減少しました。徐々に増加し、2017 年初めに TIOBE プログラミング言語オブザイヤーを 2 度目で受賞しました。これにより、Go 言語はいくぶん「インフレ」しました。熱狂的な Go 擁護者でさえ、かつては Go が世界を席巻することを期待していました。世界: Java のエンタープライズ レベルの市場を占有するためには、独自のクラウド ネイティブ市場をしっかりとコントロールするだけでなく、ターミナル (android.ios) とフロントエンド (js) で既存の敵を打ち破る必要もあります。

私の上記の発言はばかばかしいと思う人もいるかもしれませんが、根拠がないわけではありません。 Go 言語はターミナルとフロントエンドの側面で本当に大きな成果を上げています。Go の歴史を知っている人なら誰でも、かつて Go チームにフルタイムの開発者が [gomobile プロジェクト]( に参加していたことを知っています。これは Go テクノロジーの構築を目的としています) Go 言語でターミナル アプリケーションを記述するという目的を達成するため、Android および iOS にスタックを追加します。

フロントエンドに関しては、[gopherjs プロジェクト] は go コードを js コードにコンパイルし、主要なブラウザで実行できます。その後、gopherjs の作者が go プロジェクトを支援しました。Webassembly をネイティブにサポートし、WebAssembly へのコンパイルとブラウザでの実行をサポートしました。

しかし、上記の試みは結局「成功」せず、ターミナルやフロントエンドアプリケーションの分野ではGoコーディングを使っている人はほとんどいないのが現状です。そこでGoは徐々に落ち着いて得意の主戦場に戻り、エンタープライズレベルのアプリケーション、インフラ、ミドルウェア、マイクロサービス、コマンドラインアプリケーションなどの分野に戻り、ますます多くの開発者から支持されるようになった。これらのフィールドです。

しかし、総攻撃の失敗により、多くの開発者は「Go の機能が弱い」という言い訳を残すことになり、[父である Google] が弟の Android にバックドアを作成させるわけにはいかなかったとさえ言う人もいます。行く。

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

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!