Las aplicaciones que se ejecutan en el tiempo de ejecución estándar de Go 1.12 o versiones posteriores pueden usar cualquier paquete compatible con linux/amd64.
App Engine requiere que todas las instrucciones de importación de tu código Go especifiquen rutas absolutas. Por ejemplo, usa lo siguiente:
import "github.com/example/mypackage"
Usar módulos de Go
Te recomendamos que uses módulos de Go para gestionar las dependencias de tu aplicación Go. Puedes seguir usando el modo GOPATH
anterior si no tienes todo listo para migrar a los módulos de Go.
A partir de la versión 1.22 de Go:
No puedes usar
go get
fuera de un módulo en el modoGOPATH
antiguo (GO111MODULE
=off
). Para obtener más información, consulta Herramientas.Go recomienda usar un archivo
go.mod
para gestionar las dependencias. Para instalar las dependencias durante la implementación, incluye un archivogo.mod
en la misma carpeta que el archivoapp.yaml
. Para obtener más información sobre las versiones de Go y la gestión de dependencias de directorios de proveedores, consultaGOPATH
y Módulos.
Cuando despliega su aplicación, App Engine usa el comando go build
para compilar su aplicación y se comporta como Go. Para asegurarte de que tu aplicación usa el modo module-aware
, haz lo siguiente en tu entorno de desarrollo:
Crea el archivo
go.mod
de tu módulo en el mismo directorio que el archivoapp.yaml
. App Engine busca en el directorio actual y en los directorios principales sucesivos hasta que encuentra un archivogo.mod
.Si App Engine no encuentra un archivo
go.mod
, sigue el modoGOPATH
.Si defines la variable de entorno
GO111MODULE
, asegúrate de que el valor de la variable habilite el modomodule-aware
. Cuando implementas tu aplicación, App Engine comprueba tu entorno en busca deGO111MODULE
y se comporta como Go. App Engine solo aplica el ajuste de la variableGO111MODULE
si has incluido un archivogo.mod
en tu aplicación.En Go 1.12, no busques el directorio de tu aplicación en la carpeta
$GOPATH/src
. Si tu aplicación Go 1.12 se encuentra en cualquier parte del árbol de directorios$GOPATH/src
, App Engine seguirá el modoGOPATH
aunque hayas definido un archivogo.mod
para tu aplicación.En Go 1.13 y versiones posteriores, App Engine usa el modo
module-aware
de forma predeterminada, a menos queGO111MODULE
anule el valor predeterminado o que no haya ningún archivogo.mod
en el directorio de la aplicación.
Incluir dependencias de proveedores
Incluir en el paquete copia los paquetes que usa tu aplicación 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 incluir los paquetes que necesita tu aplicación
en un directorio llamado vendor
en el directorio raíz de tu aplicación.
En Go 1.14 y versiones posteriores, si el directorio raíz de tu aplicación contiene un directorio llamado vendor
, el comando go build
y el proceso de implementación de App Engine usan los paquetes del directorio vendor 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
.
Usar dependencias privadas
App Engine no puede descargar tus dependencias privadas durante el proceso de compilación, por lo que debes incluir las dependencias con el código de tu aplicación al implementar.
Usa la directiva replace
en tu archivo go.mod
para declarar dependencias privadas. En el siguiente ejemplo se da por hecho que tu aplicación está en el directorio /myapp/
:
Cambia al directorio de tu aplicación:
cd /myapp
Crea un directorio que contenga tus dependencias privadas:
mkdir private
Asegúrate de que tu dependencia privada esté en el directorio
private
. Una forma de hacerlo es crear un enlace simbólico:mkdir private/private.example.com ln -s /path/to/private.example.com/foo private/private.example.com/foo
Actualiza tu archivo
go.mod
para usar la directivareplace
y el directorioprivate
de tu dependencia:go mod edit -replace=private.example.com/foo=./private/private.example.com/foo
Tu archivo
go.mod
ahora debería tener este aspecto:Archivo
go.mod
finalmodule private.example.com/myapp require private.example.com/foo v1.2.3 replace private.example.com/foo => ./private/private.example.com/foo
Archivo
go.mod
originalmodule private.example.com/myapp require private.example.com/foo v1.2.3
No modifiques la forma en que importas y usas tu paquete privado. Tu instrucción
import
debería tener este aspecto:import "private.example.com/foo"
Incluye tu dependencia privada en tu implementación implementando tu aplicación:
gcloud app deploy