Stay organized with collections
Save and categorize content based on your preferences.
Apps that run in the Go 1.12+ standard runtime can use any
linux/amd64-compatible package.
App Engine requires all import statements in your Go code to
specify absolute paths. For example, use:
import"github.com/example/mypackage"
Use Go modules
We recommend that you use Go modules
to manage dependencies in your Go app. You can continue to use the older GOPATH mode
if you aren't ready to migrate
to Go modules.
Starting in Go version 1.22 and later:
You can't use go get outside of a module in the legacy GOPATH mode
(GO111MODULE=off). For more information, see Tools.
Go recommends that you use a go.mod file for managing dependencies. To install
dependencies during deployment, include a go.mod file in the same folder as
the app.yaml file. For more information about Go versions, and managing
dependencies for vendor directories, see GOPATH and Modules.
When you deploy your app, App Engine uses the go build command to
build your app and 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 and the 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 that 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.
For Go 1.12, don't locate your app directory within the $GOPATH/src folder. If
your Go 1.12 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.
For Go 1.13 and later, App Engine uses
module-aware mode
by default, unless GO111MODULE overrides the default or a go.mod file
doesn't exist in the app's directory.
Vendoring dependencies
Vendoring copies the packages your app uses into the application directory
instead of downloading modules from their sources during the build process. Go
provides the go build command to
vendor the packages your app needs
into a directory named vendor in your app's root directory.
In Go 1.14 and later, if your app's root directory contains a directory named
vendor, the go build command and the App Engine
deployment process use the packages in the vendor directory instead of
downloading modules.
In Go 1.13 and earlier, vendoring is only available if you set up your
environment to use GOPATH mode.
Use private dependencies
App Engine can't download your private dependencies during the build
process, so you must include the dependencies with your application code upon
deployment.
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:
mkdirprivate
Make sure your private dependency is in the private directory. One
approach is by creating a symlink:
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-25 UTC."],[[["\u003cp\u003eGo apps in App Engine must use absolute paths in import statements, such as \u003ccode\u003eimport "github.com/example/mypackage"\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eUsing Go modules is recommended for managing dependencies, and a \u003ccode\u003ego.mod\u003c/code\u003e file should be included in the same folder as \u003ccode\u003eapp.yaml\u003c/code\u003e for dependency installation during deployment.\u003c/p\u003e\n"],["\u003cp\u003eFor Go 1.22 and later, \u003ccode\u003ego get\u003c/code\u003e cannot be used outside of a module in legacy \u003ccode\u003eGOPATH\u003c/code\u003e mode, and the use of a \u003ccode\u003ego.mod\u003c/code\u003e file for dependency management is strongly encouraged.\u003c/p\u003e\n"],["\u003cp\u003eApp Engine's build process uses the \u003ccode\u003ego build\u003c/code\u003e command, matching Go's behavior, and it prioritizes \u003ccode\u003emodule-aware\u003c/code\u003e mode if a \u003ccode\u003ego.mod\u003c/code\u003e file is present, or if using Go 1.13 or later, unless \u003ccode\u003eGO111MODULE\u003c/code\u003e dictates otherwise.\u003c/p\u003e\n"],["\u003cp\u003eVendoring, or copying packages to a \u003ccode\u003evendor\u003c/code\u003e directory in your app, is supported from Go 1.14 and above. And for the use of private dependencies, you should use a \u003ccode\u003ereplace\u003c/code\u003e directive in the \u003ccode\u003ego.mod\u003c/code\u003e file, and then place those dependencies within the \u003ccode\u003eprivate\u003c/code\u003e directory of the app.\u003c/p\u003e\n"]]],[],null,["# Specify dependencies\n\nApps that run in the Go 1.12+ standard runtime can use any\nlinux/amd64-compatible package.\n\nApp Engine requires all import statements in your Go code to\nspecify absolute paths. For example, use: \n\n import \"github.com/example/mypackage\"\n\nUse Go modules\n--------------\n\nWe recommend that you use [Go modules](https://blog.golang.org/using-go-modules)\nto manage dependencies in your Go app. You can continue to use the older `GOPATH` mode\nif you aren't ready to [migrate\nto Go modules](https://blog.golang.org/migrating-to-go-modules).\n\nStarting in Go **version 1.22 and later**:\n\n- You can't use `go get` outside of a module in the legacy `GOPATH` mode\n (`GO111MODULE`=`off`). For more information, see [Tools](https://tip.golang.org/doc/go1.22#:%7E:text=enables%20this%20feature.-,Tools,-Go%20command).\n\n- Go recommends that you use a `go.mod` file for managing dependencies. To install\n dependencies during deployment, include a `go.mod` file in the same folder as\n the `app.yaml` file. For more information about Go versions, and managing\n dependencies for vendor directories, see [`GOPATH` and Modules](https://pkg.go.dev/cmd/go#hdr-GOPATH_and_Modules).\n\nWhen you deploy your app, App Engine uses the `go build` command to\nbuild your app and matches the behavior of Go itself. To ensure that\nyour app uses `module-aware` mode, do the following in your development\nenvironment:\n\n- Create your module's `go.mod` file in the same directory as your `app.yaml`\n file. App Engine searches the current directory and the successive\n parent directories until it finds a [`go.mod` file](https://golang.org/cmd/go/#hdr-Defining_a_module).\n\n If App Engine doesn't find a `go.mod` file, it follows\n `GOPATH` mode.\n- If you set the [`GO111MODULE` environment variable](https://golang.org/ref/mod#mod-commands),\n make sure that the variable's value enables\n `module-aware` mode. When you deploy your app, App Engine checks your\n environment for `GO111MODULE` and matches the behavior of Go itself.\n App Engine only applies the `GO111MODULE` variable setting if you have\n included a `go.mod` file for your app.\n\n- For Go 1.12, don't locate your app directory within the `$GOPATH/src` folder. If\n your Go 1.12 app is anywhere in the `$GOPATH/src` directory tree,\n App Engine follows `GOPATH` mode even if you've defined a `go.mod` file\n for your app.\n\n For Go 1.13 and later, App Engine uses\n [`module-aware` mode](https://golang.org/cmd/go/#hdr-Module_support)\n by default, unless `GO111MODULE` overrides the default or a `go.mod` file\n doesn't exist in the app's directory.\n\n### Vendoring dependencies\n\n**Vendoring** copies the packages your app uses into the application directory\ninstead of downloading modules from their sources during the build process. Go\nprovides the `go build` command to\n[vendor the packages your app needs](https://golang.org/cmd/go/#hdr-Modules_and_vendoring)\ninto a directory named `vendor` in your app's root directory.\n\nIn Go 1.14 and later, if your app's root directory contains a directory named\n`vendor`, the `go build` command and the App Engine\ndeployment process use the packages in the vendor directory instead of\ndownloading modules.\n\nIn Go 1.13 and earlier, vendoring is only available if you set up your\nenvironment to use [`GOPATH` mode](https://golang.org/cmd/go/#hdr-GOPATH_and_Modules).\n\n### Use private dependencies\n\nApp Engine can't download your private dependencies during the build\nprocess, so you must include the dependencies with your application code upon\ndeployment.\n\nUse the `replace` directive in your `go.mod` file to declare\nprivate dependencies. The following example assumes your app is in the `/myapp/`\ndirectory:\n\n1. Change to your app directory:\n\n cd /myapp\n\n2. Create a directory containing your private dependencies:\n\n mkdir private\n\n Make sure your private dependency is in the `private` directory. One\n approach is by creating a symlink: \n\n mkdir private/private.example.com\n ln -s /path/to/private.example.com/foo private/private.example.com/foo\n\n3. Update your `go.mod` file to use the `replace` directive to use the `private`\n directory for your dependency:\n\n go mod edit -replace=private.example.com/foo=./private/private.example.com/foo\n\n Your `go.mod` file should now look like: \n\n ### Final `go.mod` file\n\n module private.example.com/myapp\n\n require private.example.com/foo v1.2.3\n\n replace private.example.com/foo =\u003e ./private/private.example.com/foo\n\n ### Original `go.mod` file\n\n module private.example.com/myapp\n\n require private.example.com/foo v1.2.3\n\n4. Don't modify how you import and use your private package. Your `import`\n statement should look like this:\n\n import \"private.example.com/foo\"\n\n5. Include your private dependency in your deployment by deploying your app:\n\n gcloud app deploy"]]