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 の構築テクニックを紹介する別の記事を公開する予定ですので、見逃さないように購読またはフォローしてください。
それまで、コーディングを楽しんでください!
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3