Notice: Over the next few months, we're reorganizing the App Engine documentation site to make it easier to find content and better align with the rest of Google Cloud products. The same content will be available, but the navigation will now match the rest of the Cloud products. If you have feedback or questions as you navigate the site, click Send Feedback.

Specifying Dependencies

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 your app.yaml file. App Engine searches the current directory, then successive parent directories until it finds a go.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 for GO111MODULE and matches the behavior of Go itself. App Engine only applies the GO111MODULE variable setting if you have included a go.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 a go.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:

  1. Change to your app directory:

    cd /myapp
  2. 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/
    ln -s /path/to/ private/
  3. Update your go.mod file to use the replace directive to use the private directory for your dependency:

    go mod edit

    Your go.mod file should now look like:

    Final go.mod file

    require v1.2.3
    replace => ./private/

    Original go.mod file

    require v1.2.3
  4. Do not modify how you import and use your private package. Your import statement should look like:

    import ""
  5. Include your private dependency in your deployment by deploying your app:

    gcloud app deploy