Golangで`go get`からファイルを除外する方法
Wenhao Wang
Dev Intern · Leapcell

Key Takeaways
- Goのビルド制約(
//go:build tag
)を使用して、コンパイルからファイルを除外します。 go.mod
でディレクトリを分離し、ビルドやドキュメントへの包含を防ぎます。- 除外されたファイルは、ビルドプロセス中に
-tags
を使用して明示的に含めない限り、無視されます。
Goでは、ビルドプロセス中にどのファイルを含めるかを管理することが、クリーンで効率的なコードベースを維持するために不可欠です。go get
コマンドは主にパッケージのダウンロードとインストールに使用されますが、ビルド中に特定のファイルを含めるかどうかを制御するには、ビルド制約(ビルドタグとも呼ばれます)を使用します。これらのディレクティブを使用すると、開発者は指定された条件に基づいて、ビルドに含めるファイルと除外するファイルを指定できます。
ビルド制約の理解
ビルド制約は、Goソースファイルの先頭に配置される特別なコメントであり、ビルドプロセス中にファイルがパッケージに含められるタイミングを指定します。これらは、特定のビルドコンテキストでは不要なファイルを除外する場合に特に役立ちます。
ビルド制約の構文
Goバージョン1.17以降の場合、ビルド制約の構文は次のとおりです。
//go:build [condition]
1.17より前のバージョンの場合、構文は次のとおりです。
// +build [condition]
これらの行は、ソースファイルのパッケージ宣言の前に記述する必要があります。
ビルドからファイルを除外する
ビルドからファイルを除外するには、カスタムビルドタグを定義します。たとえば、exclude
タグを使用してファイルを除外するには、ファイルの先頭に次の行を追加します。
//go:build exclude
1.17より前のバージョンの場合:
// +build exclude
このディレクティブを使用すると、Goツールチェーンは、ビルド中にexclude
タグが明示的に指定されない限り、ファイルを無視します。exclude
タグを含むファイルをビルドするには、次を使用します。
go build -tags=exclude
デフォルトでは、-tags=exclude
フラグなしでgo build
を実行すると、これらのファイルはビルドから除外されます。
実践的な例
たとえば、本番ビルド用ではないデバッグユーティリティを含むdebug.go
ファイルがあるとします。debug.go
の先頭に、次を追加します。
//go:build debug
本番用にビルドする場合は、次を実行するだけです。
go build
このコマンドは、debug.go
をビルドから除外します。デバッグユーティリティを含む開発ビルドの場合は、次を使用します。
go build -tags=debug
ディレクトリの除外
examples
などのディレクトリ全体をビルドおよびドキュメントから除外するには、examples
ディレクトリ内に別のgo.mod
ファイルを配置します。このアプローチでは、ディレクトリが個別のモジュールとして扱われ、メインのビルドプロセスに含まれなくなります。Go Forumで説明されているように、examples
ディレクトリにgo.mod
ファイルを追加すると、効果的にメインモジュールから分離されます。
結論
go get
はパッケージの取得とインストールに重点を置いていますが、ビルド中にどのファイルを含めるかを制御するのは、ビルド制約によって管理されます。ビルドタグを効果的に使用し、サンプルディレクトリ用に個別のgo.mod
ファイルを使用するなど、考慮事項を含めてプロジェクトを構成することで、Goでクリーンで効率的なビルドプロセスを維持できます。
FAQs
ファイルの先頭に//go:build [tag]
を追加し、ビルド中にタグを指定しないようにします。
はい、ディレクトリ内にgo.mod
ファイルを配置し、個別のモジュールとして扱うことで可能です。
ビルド制約のあるファイルは、-tags
で明示的に含めない限り除外されます。
Goプロジェクトのホスティングに最適なLeapcellはこちらです。
Leapcellは、Webホスティング、非同期タスク、Redis向けの次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発できます。
無制限のプロジェクトを無料でデプロイ
- 使用量に対してのみ支払い — リクエストも料金もかかりません。
比類のないコスト効率
- アイドル料金なしの従量課金制。
- 例:25ドルで平均応答時間60msで694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI / CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムメトリックとロギング。
簡単なスケーラビリティと高いパフォーマンス
- 高い同時実行性を容易に処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ — 構築に集中するだけです。
詳細については、ドキュメントをご覧ください。
Xでフォローしてください:@LeapcellHQ