Specifica delle dipendenze in Go
Cloud Functions in Go deve fornire tutte le sue dipendenze tramite moduli Go con un file go.mod
o una directory vendor
. La funzione non può specificare le dipendenze utilizzando contemporaneamente i moduli Go e una directory vendor
.
Il runtime Go include una serie di pacchetti di sistema nell'ambiente di esecuzione. Se la funzione utilizza una dipendenza che richiede un pacchetto di sistema non incluso nell'elenco, puoi richiedere un pacchetto.
I contenuti di questo documento si applicano sia a Go 1.11 che a Go 1.13.
Utilizzo dei moduli Go
Cloud Functions supporta la
funzionalità dei moduli sperimentali di Go,
che consente di specificare le dipendenze in un file go.mod
alla base
del progetto. Quando esegui il deployment della funzione, le dipendenze specificate nel
file go.mod
verranno recuperate e create automaticamente.
Il comportamento dei moduli Go varia a seconda che si stia sviluppando all'interno o all'esterno di GOPATH
. Per stabilire se ti trovi all'interno di GOPATH
:
Accedi alla directory del progetto.
Per trovare il dispositivo
GOPATH
esegui il comando:go env GOPATH
Genera una riga simile alla seguente:
GOPATH=YOUR_GOPATH
Per trovare la directory di lavoro corrente:
pwd
Se la directory di lavoro inizia con YOUR_GOPATH
,
si trova in GOPATH
. In questo caso, genera il file go.mod
eseguendo i tre comandi seguenti:
export GO111MODULE=on go mod init go mod tidy
Se la directory di lavoro non inizia con YOUR_GOPATH
, sei fuori da GOPATH
. In questo caso, genera il file go.mod
eseguendo i comandi:
go mod init MODULE go mod tidy
Nell'esempio precedente, MODULE
è il nome del modulo.
Ad esempio, il nome del modulo potrebbe essere example.com/myproject
(tieni presente che il nome di dominio è obbligatorio). Il comando go
rileva automaticamente il nome del modulo quando ti trovi in GOPATH
.
Dopo aver creato un file go.mod
, puoi utilizzare il comando go get
per recuperare le dipendenze e aggiungerle automaticamente al progetto. Ad esempio:
go get DEPENDENCY
Nell'esempio precedente, DEPENDENCY
è una dipendenza che
vuoi aggiungere alla funzione. Ad esempio, il comando go get cloud.google.com/go/storage
aggiunge la libreria client di Cloud Storage alla tua funzione.
Utilizzo di una directory vendor
Cloud Functions ti consente inoltre di includere le dipendenze tramite una
directory vendor
. Nella maggior parte
dei casi, le directory vendor
vengono gestite con un gestore delle dipendenze.
Puoi utilizzare qualsiasi gestore delle dipendenze che ti piace. Ad esempio, puoi utilizzare la funzionalità Moduli di Go per creare una directory vendor
dal file go.mod
.
L'utilizzo di una directory vendor
è utile se la dipendenza non è disponibile tramite un
dipendente o se l'accesso a Internet
nell'ambiente Cloud Functions è limitato.
Dopo aver configurato la directory vendor
, potresti dover eseguire passaggi aggiuntivi per garantire che i relativi contenuti vengano rispettati, a seconda della versione di Go utilizzata:
Go versione 1.16 o successiva
Se utilizzi Go 1.16 o versioni successive, puoi lasciare la directory vendor
così com'è. Quando il modulo principale contiene una directory vendor
di primo livello e il suo file go.mod
specifica Go 1.16 o versioni successive, il comando go
viene impostato su -mod=vendor
per le operazioni che accettano quel flag.
Versione Go precedente alla 1.16
Se utilizzi una versione di Go precedente alla 1.16, devi eseguire quanto segue affinché
i contenuti della directory vendor
vengano rispettati.
Per le versioni precedenti a 1.16, se hai un file go.mod
e una directory vendor
, la directory vendor
verrà ignorata quando esegui il deployment della funzione.
Puoi utilizzare un file .gcloudignore
per evitare di caricare i file go.mod
e go.sum
:
Crea un file
.gcloudignore
nella directory principale del progetto con i seguenti contenuti:go.mod go.sum # Also ignore Git directories. Delete the following two lines if you want to # upload them. .git .gitignore
Crea una directory
vendor
utilizzando i contenuti del filego.mod
eseguendo il comando seguente:go mod vendor
Quando utilizzi l'interfaccia a riga di comando di Google Cloud per eseguire il deployment della funzione, puoi assicurarti che go.mod
non venga caricato utilizzando .gcloudignore
.
Utilizzo delle dipendenze private
Se le dipendenze della tua funzione sono ospitate in un repository non pubblicamente accessibile, devi utilizzare una directory vendor
per recuperare le dipendenze prima di eseguire il deployment della funzione. Se prevedi di utilizzare un file go.mod
, consulta le istruzioni in alto per evitare potenziali conflitti tra il file go.mod
e la directory vendor
.