Las apps que se ejecutan en el entorno de ejecución estándar de Go 1.11 pueden usar cualquier paquete compatible con linux/amd64.
Usa módulos de Go
Recomendamos que uses los módulos de Go para administrar dependencias en la app de Go, pero puedes seguir usando el modo GOPATH anterior si no estás listo para migrar a los módulos de Go.
Cuando implementas la app, App Engine usa el comando go build para compilarla y, por lo tanto, coincide con el comportamiento de Go. Para asegurarte de que la app use el modo compatible con el módulo, haz lo siguiente en tu entorno de desarrollo:
- Crea el archivo - go.moddel módulo en el mismo directorio que el archivo- app.yaml. App Engine busca en el directorio actual y, luego, en los directorios superiores de forma sucesiva 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 compatible con el módulo. Cuando implementas la app, App Engine comprueba que tu entorno tenga- GO111MODULEy coincida con el comportamiento de Go. App Engine solo aplica la configuración de la variable- GO111MODULEsi incluiste un archivo- go.modpara tu app.
- No ubiques el directorio de la app dentro de $GOPATH/src. Si la app se encuentra en cualquier parte del árbol de directorio$GOPATH/src, App Engine sigue el modo GOPATH, incluso si definiste un archivogo.modpara la app.
Usa dependencias privadas
App Engine no puede descargar tus dependencias privadas durante el proceso de compilación, por lo que debes incluirlas en el código de la aplicación en el momento de la implementación.
Deberás usar 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: - mkdir private- Asegúrate de que la dependencia privada se encuentre en el directorio - private. Un enfoque consiste en crear un symlink:- mkdir private/private.example.com ln -s /path/to/private.example.com/foo private/private.example.com/foo
- Actualiza el archivo - go.modcon el objetivo de usar la directiva- replacea fin de usar el directorio- privatepara tu dependencia:- go mod edit -replace=private.example.com/foo=./private/private.example.com/foo- El archivo - go.moddebería verse de la siguiente manera:- Archivo- go.modfinal- module private.example.com/myapp require private.example.com/foo v1.2.3 replace private.example.com/foo => ./private/private.example.com/foo- Archivo- go.modoriginal- module private.example.com/myapp require private.example.com/foo v1.2.3
- No modifiques la forma en la que importas y usas tu paquete privado. La declaración - importdebería verse de la siguiente manera:- import "private.example.com/foo"
- Mediante la implementación de la app, incluye tu dependencia privada: - gcloud app deploy