Spécifier des dépendances en Go
Cloud Functions dans Go doit fournir toutes ses dépendances via des modules Go avec un fichier go.mod
ou via un répertoire vendor
. Votre fonction ne peut pas spécifier de dépendances utilisant à la fois des modules Go et un répertoire vendor
.
L'environnement d'exécution Go inclut un certain nombre de packages système. Si votre fonction utilise une dépendance nécessitant un package système non répertorié, vous pouvez demander un package.
Le contenu de ce document s'applique à Go 1.11 et à Go 1.13.
Utiliser les modules Go
Cloud Functions est compatible avec la fonctionnalité expérimentale Modules de Go, qui permet de spécifier des dépendances dans un fichier go.mod
à la racine de votre projet. Lorsque vous déployez votre fonction, les dépendances spécifiées dans le fichier go.mod
sont récupérées et compilées automatiquement.
Le comportement des modules Go varie selon que vous développez à l'intérieur ou à l'extérieur de GOPATH
. Pour déterminer si vous êtes à l'intérieur de GOPATH
, procédez comme suit :
Accédez au répertoire du projet.
Trouvez votre
GOPATH
en exécutant la commande suivante :go env GOPATH
Vous obtenez une ligne semblable à la suivante :
GOPATH=YOUR_GOPATH
Trouvez votre répertoire de travail actuel en exécutant la commande suivante :
pwd
Si le répertoire de travail commence par YOUR_GOPATH
, vous êtes dans GOPATH
. Dans ce cas, générez le fichier go.mod
à l'aide des trois commandes suivantes :
export GO111MODULE=on go mod init go mod tidy
Si le répertoire de travail ne commence pas par YOUR_GOPATH
, vous n'êtes pas dans GOPATH
. Dans ce cas, générez le fichier go.mod
à l'aide des commandes suivantes :
go mod init MODULE go mod tidy
Dans l'exemple ci-dessus, MODULE
est le nom de votre module.
Par exemple, le nom de votre module peut être example.com/myproject
. (Notez que le nom de domaine est obligatoire.) La commande go
détecte automatiquement le nom du module lorsque vous êtes dans GOPATH
.
Après avoir créé un fichier go.mod
, vous pouvez utiliser la commande go get
pour récupérer les dépendances et les ajouter automatiquement à votre projet. Exemple :
go get DEPENDENCY
Dans l'exemple ci-dessus, DEPENDENCY
est une dépendance que vous souhaitez ajouter à votre fonction. Par exemple, la commande go get cloud.google.com/go/storage
ajoute la bibliothèque cliente Cloud Storage à votre fonction.
Utiliser un répertoire vendor
Cloud Functions vous permet également d'inclure vos dépendances via un répertoire vendor
. La plupart du temps, les répertoires vendor
sont gérés par un gestionnaire de dépendances.
Vous pouvez utiliser le gestionnaire de dépendances de votre choix. Par exemple, vous pouvez utiliser la fonctionnalité "Modules" de Go pour créer un répertoire vendor
à partir de votre fichier go.mod
.
L'utilisation d'un répertoire vendor
est utile si votre dépendance n'est pas disponible via un gestionnaire de dépendances ou si l'accès Internet de votre environnement Cloud Functions est limité.
Une fois le répertoire vendor
configuré, vous devrez peut-être effectuer des étapes supplémentaires afin de vous assurer que son contenu est respecté, en fonction de la version de Go que vous utilisez :
Go version 1.16 ou supérieure
Si vous utilisez Go 1.16 ou une version ultérieure, vous pouvez laisser le répertoire vendor
tel quel. Lorsque le module principal contient un répertoire vendor
de premier niveau et que son fichier go.mod
spécifie Go 1.16 ou une version ultérieure, la commande go
est définie par défaut sur -mod=vendor
pour les opérations qui acceptent cette option.
Version Go antérieure à la version 1.16
Si vous utilisez une version de Go antérieure à la version 1.16, vous devez procéder comme suit pour que le contenu du répertoire vendor
soit respecté.
Pour les versions de Go antérieures à la version 1.16, si vous avez un fichier go.mod
et un répertoire vendor
, le répertoire vendor
sera ignoré lors du déploiement de la fonction.
Vous pouvez utiliser un fichier .gcloudignore
pour éviter d'importer vos fichiers go.mod
et go.sum
:
Créez un fichier
.gcloudignore
à la racine du répertoire de votre projet, avec le contenu suivant :go.mod go.sum # Also ignore Git directories. Delete the following two lines if you want to # upload them. .git .gitignore
Créez un répertoire
vendor
à partir du contenu de votre fichiergo.mod
en exécutant la commande suivante :go mod vendor
Lorsque vous utilisez Google Cloud CLI pour déployer votre fonction, vous pouvez vous assurer que go.mod
n'est pas importé en utilisant .gcloudignore
.
Utiliser des dépendances privées
Si les dépendances de votre fonction sont hébergées dans un dépôt qui n'est pas accessible publiquement, vous devez utiliser un répertoire vendor
pour récupérer les dépendances avant de déployer votre fonction. Si vous prévoyez d'utiliser un fichier go.mod
, suivez les instructions ci-dessus pour éviter tout conflit entre le fichier go.mod
et le répertoire vendor
.