Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Las apps que se ejecutan en el entorno de ejecución estándar de Go 1.12 y versiones posteriores pueden usar cualquier paquete compatible con linux/amd64.
App Engine requiere todas las declaraciones de importación en tu código de Go para especificar rutas absolutas. Por ejemplo, usa esto:
import"github.com/example/mypackage"
Usa módulos de Go
Te recomendamos usar los módulos de Go para administrar las dependencias en la app de Go. Puedes seguir usando el modo GOPATH anterior si no estás listo para migrar a los módulos de Go.
A partir de la versión 1.22 de Go y posteriores:
No puedes usar go get fuera de un módulo en el modo heredado GOPATH (GO111MODULE=off). Para obtener más información, consulta Herramientas.
Go recomienda que uses un archivo go.mod para administrar dependencias. Para instalar dependencias durante la implementación, incluye un archivo go.mod en la misma carpeta que el archivo app.yaml. Si deseas obtener más información sobre las versiones de Go y la administración de dependencias para directorios de proveedores, consulta GOPATH y módulos.
Cuando implementas la app, App Engine usa el comando go build para compilarla y coincide con el comportamiento de Go. Para asegurarte de que la app use el modo module-aware, haz lo siguiente en el entorno de desarrollo:
Crea el archivo go.mod del módulo en el mismo directorio que el archivo app.yaml. App Engine busca en el directorio actual y en los directorios superiores sucesivos hasta encontrar un archivo go.mod.
Si App Engine no encuentra un archivo go.mod, sigue el modo GOPATH.
Si configuras la variable de entorno GO111MODULE, asegúrate de que el valor de la variable habilite el modo module-aware. Cuando implementas la app, App Engine comprueba que tu entorno tenga GO111MODULE y coincida con el comportamiento de Go.
App Engine solo aplica la configuración de la variable GO111MODULE si incluiste un archivo go.mod para tu app.
Para Go 1.12, no ubiques el directorio de tu app dentro de la carpeta $GOPATH/src. Si tu aplicación de Go 1.12 se encuentra en cualquier parte del árbol de directorios $GOPATH/src, App Engine sigue el modo GOPATH, incluso si definiste un archivo go.mod para la aplicación.
Para Go 1.13 y versiones posteriores, App Engine usa el modo module-aware de forma predeterminada, a menos que GO111MODULE anule el valor predeterminado o que un archivo go.mod no exista en el directorio de la aplicación.
Dependecias de vendoring
Mediante el vendoring, se copian los paquetes que usa tu app en el directorio de la aplicación en lugar de descargar módulos de sus fuentes durante el proceso de compilación. Go proporciona el comando go build para hacer el vendoring de los paquetes que necesita tu app en un directorio llamado vendor en el directorio raíz de tu app.
En Go 1.14 y versiones posteriores, si el directorio raíz de tu app contiene un directorio llamado vendor, el comando go build y el proceso de implementación de App Engine usan los paquetes del directorio del proveedor en lugar de descargar módulos.
En Go 1.13 y versiones anteriores, el proveedor solo está disponible si configuras tu entorno para usar el modo GOPATH.
Usa dependencias privadas
App Engine no puede descargar tus dependencias privadas durante el proceso de compilación, por lo que debes incluir las dependencias con tu código de la aplicación en la implementación.
Usa la directiva replace en tu archivo go.mod para declarar dependencias privadas. En el siguiente ejemplo, se supone que la app se encuentra en el directorio /myapp/:
Cambia al directorio de tu app:
cd/myapp
Crea un directorio que contenga tus dependencias privadas:
mkdirprivate
Asegúrate de que la dependencia privada se encuentre en el directorio private. Un enfoque consiste en crear un symlink:
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-04-21 (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"]]