目次
Go 言語の利点
簡単なデプロイメント
優れたパフォーマンス
同時実行性とチャネル
優れた言語設計
標準ライブラリとツール
チームは素晴らしいです
Go の成功したプロジェクト
エコロジカルなカードスロットと暗黙の標準
Go での Bytom の実践
ブロックチェーン上の Go のケース
統合コラボレーション
概要
ホームページ バックエンド開発 Golang ブロックチェーンの作成に Go 言語を使用する理由

ブロックチェーンの作成に Go 言語を使用する理由

Mar 04, 2021 pm 03:42 PM
言語を移動 ブロックチェーン

理由: 1. Go 言語には、簡単なデプロイメント、優れたパフォーマンス、優れた並列実行パフォーマンス、優れた言語設計、多数の組み込みライブラリ、および素晴らしいチームという利点があります。 2. イーサリアムとハイパーレジャーは開発言語として Go を使用することを選択しています; これら 2 つのスーパー ブロックチェーンは大きな影響力を持っており、エコロジーの大きなニッチを占めるだけでなく、暗黙的にブロックチェーン標準を策定しています。

ブロックチェーンの作成に Go 言語を使用する理由

このチュートリアルの動作環境: Windows10 システム、GO 1.18、thinkpad t480 コンピューター。

パブリック ブロックチェーン開発サークルでは、C、Golang、Python、最近リリースされた Rust など、人気のあるプログラミング言語がいくつか見つかりました。

以下に示すように、より有名なプロジェクトで使用されているプログラミング言語に関する統計を作成してみましょう:

ブロックチェーンの作成に Go 言語を使用する理由

旧世代のパブリック チェーン。ビットコインとリトコインのように、一般に C/C がより多く使用されていました (当時を見てみましょう。Go はまだ出現していませんでした)。イーサリアムやアライアンス チェーンのリーダーであるハイパーレジャーなどの新世代のパブリック チェーンは、 Go 言語をもっと見る. もちろん、Rust の開発も見られました. 勢いも非常に強いです. 過去 2 年間で、Polkadot や Grin などの多くのパブリック チェーンが開発に Rust 言語を使用し始めました。

Go 言語の利点

簡単なデプロイメント

Go コンパイル生成されるのは、glibc 以外の外部依存関係を持たない静的実行可能ファイルです。これにより、展開が非常に便利になります。ターゲット マシンには基本システムと必要な管理および監視ツールのみが必要で、アプリケーションに必要なさまざまなパッケージやライブラリの依存関係を心配する必要がなく、メンテナンスの負担が大幅に軽減されます。マシンコードに直接コンパイルでき、他のライブラリに依存しません。glibc のバージョンには特定の要件があり、ファイルをスローすることでデプロイが完了します。

優れたパフォーマンス

C や Java ほどではありませんが、通常はネイティブ Python アプリケーションよりも桁違いに優れています。いくつかのボトルネックビジネスを記述するのに適しています。メモリ使用量も非常に経済的です。

同時実行性とチャネル

Goroutine とチャネルを使用すると、同時実行性の高いサーバー ソフトウェアを非常に簡単に作成でき、多くの場合、まったく必要ありません。ロック機構とそれがもたらすさまざまな問題について考えてみましょう。単一の Go アプリケーションは複数の CPU コアを効果的に利用し、優れた並列実行パフォーマンスを実現することもできます。

優れた言語設計

Go は非常にシンプルで習得が簡単です。学術的な観点から見ると、Go 言語は実際には非常に平凡で、多くの高度な言語機能をサポートしていませんが、エンジニアリングの観点から見ると、Go の設計は非常に優れており、仕様はシンプルで十分に柔軟です。 Go はシンプルなので、Python、Elixir、C、Scala、または Java の開発者であれば、1 か月以内に効率的な Go チームを結成できます。

標準ライブラリとツール

Go には現在、多数の組み込みライブラリがあり、特にネットワーク ライブラリは非常に強力です。さらに重要なことは、Go には完全なツール チェーンが付属しており、これによりチームのコラボレーションの一貫性が大幅に向上します。たとえば、 gofmt は Go コードを自動的にフォーマットするため、さまざまな人々が作成したコードのフォーマット スタイルが一貫していないという問題が大幅に解消されます。アーカイブの編集時に gofmt を自動的に実行するようにエディターを構成すると、コードを記述するときに gofmt をどこにでも配置でき、アーカイブ時に自動的に正しくフォーマットされたコードになります。さらに、gofix や govet などの非常に便利なツールもあります。

チームは素晴らしいです

Go 言語のサポーターは Google です。この言語はさまざまなシナリオでテストするのに十分です。創始者は今でもC言語の父であり、今後の発展と革新が期待できます。

Go の成功したプロジェクト

Go 言語は、クラウド時代、特に Docker や K8s などのキラー製品で広く使用されてきました。 Go の登場Go 言語に加えて、多くのソフトウェアが正常に実行されています:

nsq: bitly のオープン ソース メッセージ キュー システムは非常に高いパフォーマンスを持っています。現在、彼らはそれを毎回処理しています。 1 日あたり数十億のメッセージ

packer: VM、vbox、AWS などのさまざまなプラットフォーム用のイメージ ファイルを生成するために使用されます。作者は vagrant の作者です

skynet: 分散スケジューリング フレームワーク Doozer : ZooKeeper に似た分散同期ツール

Heka: mazila オープン ソース ログ処理システム

cbfs: couchbase オープン ソース分散ファイル システム

tsuru: オープン ソース PAAS プラットフォーム、およびSAE によって実装される関数はまったく同じです。

groupcache: Google ダウンロード システム用に memcahe の作者によって書かれたキャッシュ システムです。

god: Redis に似たキャッシュ システムですが、配布とサポートをサポートしています。スケーラビリティ

gor: ネットワーク トラフィック パケットのキャプチャおよび再生ツール

エコロジカルなカードスロットと暗黙の標準

ハードワークの必要性に加えて、ブロックチェーンに Go 言語を選択させる機会と幸運もありました。ブロックチェーン 2.0 以降で最も成功したパブリック チェーンおよびコンソーシアム チェーンの代表者であるイーサリアムとハイパーレジャー ファブリックを見てみましょう。例外なく、それらはすべて開発言語として Go を使用することを選択しています (ただし、イーサリアムには実際には他の言語のクライアント バージョンがありますが、ホームステッド段階では、Go クライアントが支配的な地位を占めています。これら 2 つのスーパー ブロックチェーンの影響力は、通常のプロジェクトとは比べものになりません。エコロジーの大きなニッチを占めるだけでなく、暗黙的に定式化されます。標準がなければ、パブリックチェーンのスマートコントラクトであろうと、アライアンスチェーン技術であろうと、ブロックチェーンの実装においてイーサリアムとファブリックを回避することはできません。

当然のことながら、私たちはこれら 2 つのプロジェクトのイノベーションを直接コピーします。もう 1 つの近道は、オープン ソース コードを直接変更することです。そうすると、当然、後発者にとって Go 言語が最初の選択肢になります。それを再実装するのは簡単ではありません。革新的ではあるがあまり成熟していない言語を選択すると、特定のライブラリのサポートも不足し、プロジェクトを実行できなくなります。

多くの人はイーサリアムの影響について疑いを持っていませんが、実際、エンタープライズ ブロックチェーンの導入に対するファブリックの影響は過小評価できません:

ブロックチェーンの作成に Go 言語を使用する理由

チャート出典「2019 Global」エンタープライズ ブロックチェーン ベンチマーク調査レポート」

Hyperledger Fabric は、導入されたエンタープライズ ブロックチェーン ネットワークで最も使用されているプロトコル フレームワークであり、Hyperledger Hyperledger (ファブリックが主力プロトコルである) は、インテグレーターとソフトウェア開発によって最も一般的にサポートされているプロトコル フレームワークです。プラットフォームは 53% に達します。ブロックチェーン技術の書籍の中で、Hyperledger に関する書籍が最も人気があるという事実も、Hyperledger の影響力を裏付けています。

Go での Bytom の実践

プログラミング言語を選択する過程で、C、C、Java を検討しましたが、大規模な C/Cプロジェクトは維持するのが難しく、Java は少し面倒です。現時点では、Go 言語はブロックチェーン プロジェクトですでに輝いており、テクノロジーと才能に対するヘッドエンド効果が徐々に形成されているため、トレンドに従ってテクノロジーを実行する必要があります。もちろん、徐々に開発が進められていく過程で、Go 言語を選択することで得られる利便性や利点も感じました。

ブロックチェーン上の Go のケース

技術的に言えば、ブロックチェーン ノードは非同期で連携するために複数のモジュールを必要とするため、Go 言語の同時実行性とチャネルは非常に有利です。次のトランザクション検証の例では:

func ValidateTxs(txs []*bc.Tx, block *bc.Block) []*ValidateTxResult {
    txSize := len(txs)
    //init the goroutine validate worker
    var wg sync.WaitGroup
    workCh := make(chan *validateTxWork, txSize)
    resultCh := make(chan *ValidateTxResult, txSize)
    closeCh := make(chan struct{})
    for i := 0; i <= validateWorkerNum && i < txSize; i++ {
        wg.Add(1)
        go validateTxWorker(workCh, resultCh, closeCh, &wg)
    }

    //sent the works
    for i, tx := range txs {
        workCh <- &validateTxWork{i: i, tx: tx, block: block}
    }

    //collect validate results
    results := make([]*ValidateTxResult, txSize)
    for i := 0; i < txSize; i++ {
        result := <-resultCh
        results[result.i] = result
    }

    close(closeCh)
    wg.Wait()
    close(workCh)
    close(resultCh)
    return results
}
ログイン後にコピー

ルーチン Ch WaitGroup を使用して、30 行のコード内で同時トランザクション検証機能を構築します。 100,000TPS。

簡単に Go 言語マスターになれます

才能の面では、Bytom コア開発チームの一部のメンバーはこれまで Go 言語開発をしたことがありませんが、全員が能力を持っています。すぐに始めることができ、基本的に半月以内にコアコードの開発と保守に参加できる(特にC/C/Javaの経験のある開発者にとっては容易である)これがチームビルディングにおけるシンプルな言語の利点です。

統合コラボレーション

コラボレーションの観点では、gofmt は自動的に Go コードをタイプセットし、コア チーム メンバーやコミュニティ開発者さえもサブミットできるようにします。コーディング スタイルが最小限に抑えられ、プロジェクトの全体的な品質と保守性が向上します。

概要

Go 言語自体の特徴と利点がその道を切り開き、Ethereum と Hyperledger の 2 つのスーパー ブロックがその道を切り開きます。チェーン プロジェクトの祝福により、多くのブロックチェーン プロジェクトにとって Go 言語が最初の選択肢になりました。Bytom は、基盤となるブロックチェーンの開発におけるその利点を十分に理解するために Go 言語を選択しましたが、言語論争の罠に陥ったり、プラグマティズムに注意を払う必要はありません. これがエンジニアリングの正しい意味です。Bytom のコア プロジェクトは Go 言語で完了しますが、周囲の多くのサブプロジェクトも Java、Python、または JavaScript で実装されています。結局のところ、生態学的多様性はプロジェクトの長寿の基盤です。

推奨学習: Golang チュートリアル

以上がブロックチェーンの作成に Go 言語を使用する理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

GOの浮動小数点番号操作に使用されるライブラリは何ですか? GOの浮動小数点番号操作に使用されるライブラリは何ですか? Apr 02, 2025 pm 02:06 PM

GO言語の浮動小数点数操作に使用されるライブラリは、精度を確保する方法を紹介します...

GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? Apr 02, 2025 pm 04:12 PM

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

Go's Crawler Collyのキュースレッドの問題は何ですか? Go's Crawler Collyのキュースレッドの問題は何ですか? Apr 02, 2025 pm 02:09 PM

Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Apr 02, 2025 pm 02:03 PM

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

GoおよびViperライブラリを使用するときにポインターを渡す必要があるのはなぜですか? GoおよびViperライブラリを使用するときにポインターを渡す必要があるのはなぜですか? Apr 02, 2025 pm 04:00 PM

ポインター構文とviperライブラリの使用における問題への取り組みGO言語でプログラミングするとき、特にポインターの構文と使用を理解することが重要です...

GO言語の「VAR」と「タイプ」キーワード定義構造の違いは何ですか? GO言語の「VAR」と「タイプ」キーワード定義構造の違いは何ですか? Apr 02, 2025 pm 12:57 PM

GO言語で構造を定義する2つの方法:VARとタイプのキーワードの違い。構造を定義するとき、GO言語はしばしば2つの異なる執筆方法を見ます:最初...

GO言語の範囲を使用してマップを通過してマップを保存するのに、なぜすべての値が最後の要素になるのですか? GO言語の範囲を使用してマップを通過してマップを保存するのに、なぜすべての値が最後の要素になるのですか? Apr 02, 2025 pm 04:09 PM

GOのマップイテレーションにより、すべての値が最後の要素になるのはなぜですか? Go言語では、いくつかのインタビューの質問に直面したとき、あなたはしばしば地図に遭遇します...

言語スライスに行く:シングルエレメントスライスインデックス1インターセプトの場合、なぜエラーを報告しないのですか? 言語スライスに行く:シングルエレメントスライスインデックス1インターセプトの場合、なぜエラーを報告しないのですか? Apr 02, 2025 pm 02:24 PM

Go Language Slice Index:エラーなしでインデックス1からシングルエレメントスライスインターセプトがインターセプトされるのはなぜですか? GO言語では、スライスは底部を参照できる柔軟なデータ構造です...

See all articles