Apps that run in the Go 1.11 standard runtime can use any linux/amd64-compatible package.
Using Go modules
We recommend that you use Go modules to manage dependencies in your Go app, but you can continue to use the older GOPATH mode if you aren't ready to migrate to Go modules.
When you deploy your app, App Engine uses the go build command to
build your app and therefore matches the behavior of Go itself. To ensure that
your app uses module-aware mode, do the following in your development
environment:
Create your module's
go.modfile in the same directory as yourapp.yamlfile. App Engine searches the current directory, then successive parent directories until it finds ago.modfile.If App Engine doesn't find a
go.modfile, it follows GOPATH mode.If you set the
GO111MODULEenvironment variable, make sure the variable's value enables module-aware mode. When you deploy your app, App Engine checks your environment forGO111MODULEand matches the behavior of Go itself. App Engine only applies theGO111MODULEvariable setting if you have included ago.modfile for your app.
- Do not locate your app directory in or below
$GOPATH/src. If your app is anywhere in the$GOPATH/srcdirectory tree, App Engine follows GOPATH mode even if you've defined ago.modfile for your app.
Using private dependencies
App Engine cannot download your private dependencies during the build process, so you must include them with your application code upon deployment.
You will need to use the replace directive in your go.mod file to declare
private dependencies. The following example assumes your app is in the /myapp/
directory:
Change to your app directory:
cd /myappCreate a directory containing your private dependencies:
mkdir privateMake sure your private dependency is in the
privatedirectory. One approach is by creating a symlink:mkdir private/private.example.com ln -s /path/to/private.example.com/foo private/private.example.com/fooUpdate your
go.modfile to use thereplacedirective to use theprivatedirectory for your dependency:go mod edit -replace=private.example.com/foo=./private/private.example.com/fooYour
go.modfile should now look like:Final
go.modfilemodule private.example.com/myapp require private.example.com/foo v1.2.3 replace private.example.com/foo => ./private/private.example.com/fooOriginal
go.modfilemodule private.example.com/myapp require private.example.com/foo v1.2.3Do not modify how you import and use your private package. Your
importstatement should look like:import "private.example.com/foo"Include your private dependency in your deployment by deploying your app:
gcloud app deploy