App Engine フレキシブル環境で実行されているインスタンスでは、任意の linux / amd64 互換パッケージを使用できます。ここで説明する手順は、go get コマンドを使用して、GitHub、Bitbucket、LaunchPad などのサポートされているリポジトリから直接パッケージを取得することを前提としています。
Go バージョン 1.22 以降では:
以前の
GOPATHモード(GO111MODULE=off)のモジュール外でgo getを使用することはできません。詳細については、ツールをご覧ください。Go では、依存関係の管理に
go.modファイルを使用することをおすすめしています。デプロイ中に依存関係をインストールするには、app.yamlファイルと同じフォルダにgo.modファイルを含めます。Go のバージョンと、ベンダー ディレクトリの依存関係の管理については、GOPATH とモジュールをご覧ください。
依存関係を宣言して管理する
Go アプリケーションは、ソースファイルのディレクトリ構造を反映するパッケージに編成されています。import ステートメントに指定されているパスは相対パスとして解釈されます。GOPATH で指定されるすべてのディレクトリの src サブディレクトリに関連する完全修飾パスが有効なインポートパスになります。
たとえば、次のように定義するアプリの例を考えます。
GOPATHモジュール:export GOPATH=/home/fred/go.src1-1.goファイル:import "foo/bar"gcloud CLI は、アプリを実行またはデプロイするときに、
/home/fred/go/src/foo/barの場所にあるfoo/barパッケージを探します。
GOPATH にパッケージのソースを含める場合は、app.yaml ファイルがあるアプリのディレクトリ内にソースコードを配置しないように注意する必要があります。この位置に配置すると、パッケージが 2 回、つまりサービス ディレクトリの相対パスに対して 1 回、完全修飾パスに対して 1 回読み込まれ、問題が発生することがあります。問題を回避するため、gcloud CLI はアプリのディレクトリと GOPATH の両方をスキャンし、検出した競合をエラーとして報告します。
最良の結果を得るため、次のことをおすすめします。
- アプリのディレクトリの下に、サービスごとに別々のディレクトリを作成します。
- 各サービスのディレクトリには、サービスの
app.yamlファイルと 1 つ以上の.goファイルを含めます。 - サービスのディレクトリにはサブディレクトリを含めないでください。
GOPATHには、アプリのディレクトリの外にあり、アプリがインポートするすべての依存関係が含まれているディレクトリを指定する必要があります。
必要なパッケージをダウンロードする
パッケージをダウンロードするには、go get コマンドを使用します。たとえば、GitHub my_repo から packagename をダウンロードするには、次のコマンドを実行します。
go get github.com/my_repo/packagename
App Engine にデプロイする
アプリケーションを App Engine にデプロイするには、アプリが必要とするライブラリをアプリケーション コードとともにデプロイする必要があります。詳細については、アプリケーションのテストとデプロイをご覧ください。