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.mod
file in the same directory as yourapp.yaml
file. App Engine searches the current directory, then successive parent directories until it finds ago.mod
file.If App Engine doesn't find a
go.mod
file, it follows GOPATH mode.If you set the
GO111MODULE
environment variable, make sure the variable's value enables module-aware mode. When you deploy your app, App Engine checks your environment forGO111MODULE
and matches the behavior of Go itself. App Engine only applies theGO111MODULE
variable setting if you have included ago.mod
file for your app.
- Do not locate your app directory in or below
$GOPATH/src
. If your app is anywhere in the$GOPATH/src
directory tree, App Engine follows GOPATH mode even if you've defined ago.mod
file 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 /myapp
Create a directory containing your private dependencies:
mkdir private
Make sure your private dependency is in the
private
directory. One approach is by creating a symlink:mkdir private/private.example.com ln -s /path/to/private.example.com/foo private/private.example.com/foo
Update your
go.mod
file to use thereplace
directive to use theprivate
directory for your dependency:go mod edit -replace=private.example.com/foo=./private/private.example.com/foo
Your
go.mod
file should now look like:Final
go.mod
filemodule private.example.com/myapp require private.example.com/foo v1.2.3 replace private.example.com/foo => ./private/private.example.com/foo
Original
go.mod
filemodule private.example.com/myapp require private.example.com/foo v1.2.3
Do not modify how you import and use your private package. Your
import
statement should look like:import "private.example.com/foo"
Include your private dependency in your deployment by deploying your app:
gcloud app deploy