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 にデプロイするには、アプリが必要とするライブラリをアプリケーション コードとともにデプロイする必要があります。詳細については、アプリケーションのテストとデプロイをご覧ください。