Go は私の個人的なキャリアにおいて重要な言語です。私は Soundcast の CTO だったときに、堅固なオーディオ AdServer とそれを使用した SSP を構築しました。 Go では、ネットワークと並列処理が非常に簡単になるため、不正行為をしているように感じられます。これらすべてが非常に優れたパフォーマンスを発揮し、私たちがやらなければならなかった仕事に完璧でした。
パート 1 では、ソフトウェアの構築フェーズの基礎を明らかにしました。この記事では、私の心の中で特別な場所を占めている言語の助けを借りて、これをより関連性のあるものにします。実際、ソフトウェア構築の基本はどの言語でも似ていますが、各言語エコシステムには独自のツールと実践方法があります。
早速、Go に特に焦点を当ててこれらを見ていきましょう。
Google によって設計された Go は、シンプルさとスピードを重視した独自のアプローチで構築されています。
Go には build コマンドが付属しています。このコマンドは、インポート パスで指定されたパッケージとその依存関係をコンパイルしますが、結果はインストールされません。実行可能ファイルを生成します。
例:
go build main.go
Go コンパイラーの最も便利な機能の 1 つは、クロスコンパイルを非常に簡単に実行できることです。必要なのは、GOOS および GOARCH 環境変数を設定して、目的のプラットフォームをターゲットにすることだけです。
例:
GOOS=windows GOARCH=amd64 go build main.go
これにより、amd64 アーキテクチャで Windows 用の実行可能ファイルが作成されます。
Go mod は Go 1.11 で導入されたため少し遅れて登場しましたが、組み込みの依存関係管理システムです。その前は、すべての Go プロジェクトをマシン上の {$GOPATH} という専用のディレクトリに配置する必要がありました。それは機能していましたが、Go MOD により柔軟性がさらに高まりました。これは素晴らしいことです!
Go のすべてと同様、使用方法は非常に簡単です。
ビルドタグを使用して条件付きコンパイルを追加できますが、私の意見では、最も興味深い機能は、Go がビルド出力を自動的にキャッシュして後続のビルドを高速化することです (もちろん、必要に応じてキャッシュをクリーンアップできます)。
埋め込みリソース
バイナリに含めたい静的ファイルがある場合は、//go:embed ディレクティブを使用できます。
人種検出
Go は並列処理に関しては優れています。ゴルーチンとゴルーチン間で通信するチャネルのシステムにより、開発者はソフトウェアのワークロードを異なるコアに簡単に分割できます。しかし、物事をめちゃくちゃにして「人種」を生み出すことも簡単です。
データ競合は、2 つのゴルーチンが同じ変数に同時にアクセスし、アクセスの少なくとも 1 つが書き込みである場合に発生します。詳細については、「Go メモリ モデル」を参照してください。
Go コンパイラーはそれらを見つけるのに役立ちます!
レースフラグを使用して競合状態を検出します:
go build -race main.go
プロファイリングと最適化
私が Go で気に入っている主な点の 1 つは、そのパフォーマンスです。この言語は、それほど労力をかけずに確かな結果をもたらします。しかし、さらに一歩を踏み出したい場合は、Go エコシステムはパフォーマンスを測定し、コードを最適化するための非常に優れたツールも提供します。
詳細には立ち入るつもりはありませんが、この主題について詳しく知りたい場合は、この貴重な資料をお読みになることをお勧めします: https://www.practical-go-lessons.com/chap-34-benchmarks
カスタムビルドモード
ソフトウェアではなく、プラグインやライブラリなどを構築している場合もあります。 Go チームがあなたをサポートします。 Go では、ビルドモードを定義して希望の結果を得ることができます!
ご覧のとおり、Go は、開発者が Go テクノロジーを最大限に活用できるように、コンパイラーとエコシステムに多くの機能を提供しています。
今日はここまでです。今週、TypeScript の構築テクニックを紹介する別の記事を公開する予定ですので、見逃さないように購読またはフォローしてください!
それまではコーディングを楽しんでください!
以上が構築テクニック: Go の詳細の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。