Spécifier des dépendances

Les applications exécutées dans l'environnement d'exécution standard Go 1.12 (ou version ultérieure) peuvent utiliser n'importe quel package compatible avec Linux/AMD64.

App Engine a besoin de toutes les instructions d'importation de votre code Go pour spécifier des chemins absolus. Par exemple, utilisez le format suivant :

import "github.com/example/mypackage"

Utiliser les modules Go

Nous vous recommandons d'utiliser les modules Go pour gérer les dépendances de votre application Go. Vous pouvez continuer à utiliser l'ancien mode GOPATH si vous n'êtes pas prêt à migrer vers les modules Go.

À partir de la version 1.22 et ultérieure de Go:

  • Vous ne pouvez pas utiliser go get en dehors d'un module dans l'ancien mode GOPATH (GO111MODULE=off). Pour en savoir plus, consultez la section Outils.

  • Go vous recommande d'utiliser un fichier go.mod pour gérer les dépendances. Pour installer des dépendances lors du déploiement, incluez un fichier go.mod dans le même dossier que le fichier app.yaml. Pour en savoir plus sur les versions de Go et sur la gestion des dépendances pour les répertoires vendor, consultez la page GOPATH et Modules.

Lorsque vous déployez votre application, App Engine exécute la commande go build pour créer votre application et copier le comportement de Go. Pour vous assurer que votre application utilise le mode module-aware, procédez comme suit dans votre environnement de développement:

  • Créez le fichier go.mod de votre module dans le même répertoire que votre fichier app.yaml. App Engine recherche le répertoire actuel et les répertoires parents successifs jusqu'à ce qu'il trouve un fichier go.mod.

    Si App Engine ne trouve pas de fichier go.mod, il suit le mode GOPATH.

  • Si vous définissez la variable d'environnement GO111MODULE, assurez-vous que sa valeur active le mode module-aware. Lorsque vous déployez votre application, App Engine vérifie la présence de GO111MODULE dans votre environnement et copie le comportement de Go. App Engine n'applique le paramètre de la variable GO111MODULE que si vous avez inclus un fichier go.mod pour votre application.

  • Pour Go 1.12, ne recherchez pas le répertoire de votre application dans le dossier $GOPATH/src. Si votre application Go 1.12 se trouve dans l'arborescence de répertoires $GOPATH/src, App Engine suit le mode GOPATH même si vous avez défini un fichier go.mod pour votre application.

    Pour Go 1.13 et versions ultérieures, App Engine utilise le mode module-aware par défaut, sauf si GO111MODULE remplace le paramètre par défaut ou si un fichier go.mod n'existe dans le répertoire de l'application.

Effectuer un vendoring des dépendances

Le vendoring copie les packages utilisés par votre application dans le répertoire de celle-ci au lieu de télécharger des modules depuis leurs sources pendant le processus de compilation. Go fournit la commande go build pour procéder au vendoring des packages dont votre application a besoin dans un répertoire nommé vendor dans le répertoire racine de l'application.

Dans Go 1.14 et versions ultérieures, si le répertoire racine de l'application contient un répertoire nommé vendor, la commande go build et le processus de déploiement App Engine utilisent les packages du répertoire "vendor" au lieu de télécharger des modules.

Dans Go 1.13 et versions antérieures, le vendoring n'est disponible que si vous avez configuré votre environnement pour utiliser le mode GOPATH.

Utiliser des dépendances privées

App Engine ne peut pas télécharger vos dépendances privées pendant le processus de compilation. Vous devez donc les inclure avec votre code d'application lors du déploiement.

Utilisez la directive replace dans votre fichier go.mod pour déclarer des dépendances privées. L'exemple suivant suppose que votre application se trouve dans le répertoire /myapp/ :

  1. Accédez au répertoire de votre application :

    cd /myapp
    
  2. Créez un répertoire contenant vos dépendances privées :

    mkdir private
    

    Assurez-vous que votre dépendance privée se trouve dans le répertoire private. Une approche consiste à créer un lien symbolique :

    mkdir private/private.example.com
    ln -s /path/to/private.example.com/foo private/private.example.com/foo
    
  3. Mettez à jour votre fichier go.mod pour utiliser la directive replace afin d'utiliser le répertoire private pour votre dépendance :

    go mod edit -replace=private.example.com/foo=./private/private.example.com/foo
    

    Votre fichier go.mod devrait maintenant se présenter comme suit :

    Fichier 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
    

    Fichier go.mod d'origine

    module private.example.com/myapp
    
    require private.example.com/foo v1.2.3
    
  4. Ne modifiez pas la manière dont vous importez et utilisez votre package privé. Votre instruction import doit se présenter comme suit:

    import "private.example.com/foo"
    
  5. Incluez votre dépendance privée dans votre déploiement en déployant votre application :

    gcloud app deploy