Especificar dependencias

Las aplicaciones que se ejecutan en el tiempo de ejecución estándar de Go 1.11 pueden usar cualquier paquete compatible con linux/amd64.

Usar módulos de Go

Te recomendamos que uses módulos de Go para gestionar las dependencias de tu aplicación de Go, pero puedes seguir usando el modo GOPATH anterior si no tienes todo listo para migrar a los módulos de Go.

Cuando despliega su aplicación, App Engine usa el comando go build para compilar su aplicación y, por lo tanto, coincide con el comportamiento de Go. Para asegurarte de que tu aplicación usa el modo compatible con módulos, haz lo siguiente en tu entorno de desarrollo:

  • Crea el archivo go.mod de tu módulo en el mismo directorio que el archivo app.yaml. App Engine busca en el directorio actual y, a continuación, en los directorios principales sucesivos hasta que encuentra un archivo go.mod.

    Si App Engine no encuentra un archivo go.mod, sigue el modo GOPATH.

  • Si defines la variable de entorno GO111MODULE, asegúrate de que el valor de la variable habilite el modo compatible con módulos. Cuando implementas tu aplicación, App Engine comprueba tu entorno en busca de GO111MODULE y se comporta como Go. App Engine solo aplica el ajuste de la variable GO111MODULE si has incluido un archivo go.mod en tu aplicación.

  • No ubique el directorio de su aplicación en $GOPATH/src ni en ningún directorio inferior. Si tu aplicación se encuentra en cualquier parte del árbol de directorios $GOPATH/src, App Engine seguirá el modo GOPATH aunque hayas definido un archivo go.mod para tu aplicación.

Usar dependencias privadas

App Engine no puede descargar tus dependencias privadas durante el proceso de compilación, por lo que debes incluirlas con el código de tu aplicación al implementar.

Deberás usar 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/:

  1. Cambia al directorio de tu aplicación:

    cd /myapp
    
  2. 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
    
  3. Actualiza tu archivo go.mod para usar la directiva replace y el directorio private 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 final

    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.mod original

    module private.example.com/myapp
    
    require private.example.com/foo v1.2.3
    
  4. 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"
    
  5. Incluye tu dependencia privada en tu implementación implementando tu aplicación:

    gcloud app deploy