Go 1.11 のスタンダード ランタイムで動作するアプリでは、任意の linux / amd64 互換パッケージを使用できます。
Go モジュールを使用する
Go モジュールを使用して Go アプリの依存関係を管理することをおすすめしますが、Go モジュールに移行する準備ができていない場合は、引き続き以前の GOPATH モードを使用できます。
アプリをデプロイすると、App Engine は go build
コマンドでアプリをビルドします。結果として、これは Go 自体の動作と一致します。アプリでモジュール対応モードを使用するには、開発環境で次のようにします。
app.yaml
ファイルと同じディレクトリにモジュールのgo.mod
ファイルを作成します。App Engine はgo.mod
ファイルが見つかるまで、現在のディレクトリ、次に親ディレクトリを順に検索します。App Engine は
go.mod
ファイルが見つからない場合、GOPATH モードに従います。GO111MODULE
環境変数を設定する場合、変数の値でモジュール対応モードを有効にしていることを確認します。アプリをデプロイするときに、App Engine はGO111MODULE
の有無について環境をチェックするので、Go 自体の動作と一致することになります。App Engine は、アプリにgo.mod
ファイルを含めた場合にのみ、GO111MODULE
変数の設定を適用します。
- アプリのディレクトリを
$GOPATH/src
以下の場所に配置しないでください。アプリが$GOPATH/src
ディレクトリ ツリー内の任意の場所にある場合、アプリにgo.mod
ファイルを定義した場合でも App Engine は GOPATH モードに従います。
プライベート依存関係を使用する
App Engine はビルドプロセス中にプライベート依存関係をダウンロードできないため、デプロイ時にアプリケーション コードとともにそれらを組み込む必要があります。
プライベート依存関係を宣言するには、go.mod
ファイルで replace
ディレクティブを使用する必要があります。次の例では、アプリが /myapp/
ディレクトリにあると想定しています。
アプリのディレクトリに移動します。
cd /myapp
プライベート依存関係を含むディレクトリを作成します。
mkdir private
プライベート依存関係が、
private
ディレクトリにあることを確認します。この確認には、シンボリック リンクを作成するなどの方法を使用できます。mkdir private/private.example.com ln -s /path/to/private.example.com/foo private/private.example.com/foo
replace
ディレクティブを使用して、依存関係にprivate
ディレクトリを使用するようにgo.mod
ファイルを更新します。go mod edit -replace=private.example.com/foo=./private/private.example.com/foo
go.mod
ファイルは次のようになります。最終的な
go.mod
ファイルmodule private.example.com/myapp require private.example.com/foo v1.2.3 replace private.example.com/foo => ./private/private.example.com/foo
元の
go.mod
ファイルmodule private.example.com/myapp require private.example.com/foo v1.2.3
プライベート パッケージのインポート方法や使用方法は変更しないでください。
import
ステートメントは、次のようになります。import "private.example.com/foo"
アプリをデプロイして、デプロイメント内にプライベート依存関係を含めます。
gcloud app deploy