Runtime di Go
Cloud Functions supporta i seguenti runtime Go:
- Vai a 1.19 (consigliato)
- Vai a 1.18
- Go 1.16
- Go 1.13
- Go 1.11
Per istruzioni su come preparare la tua macchina locale per lo sviluppo di Go, consulta Configurare un ambiente di sviluppo Go.
Per iniziare a utilizzare Go on Cloud Functions, consulta la guida rapida.
Selezione del runtime
Puoi selezionare il runtime Go per la tua funzione durante il deployment.
gcloud
Se utilizzi Google Cloud CLI, puoi specificare il runtime tramite il parametro --runtime
con il runtime Go che preferisci.
Ad esempio:
gcloud functions deploy FUNCTION_NAME --runtime go119 FLAGS...
FLAGS...
si riferisce agli argomenti passati durante il primo deployment della funzione. Per ulteriori informazioni sugli argomenti obbligatori e facoltativi, consulta la pagina Eseguire il deployment con lo strumento gcloud.
Console
Se utilizzi la console Google Cloud, puoi selezionare il runtime quando crei ed esegui il deployment di una funzione. Per istruzioni dettagliate, consulta la guida rapida di Google Cloud Console.
Ambiente di esecuzione
L'ambiente di esecuzione include il runtime, il sistema operativo, i pacchetti e una libreria che richiama la tua funzione.
I runtime Go 1.11, Go 1.13 e Go 1.16 utilizzano un ambiente di esecuzione basato su Ubuntu 18.04. I tempi di esecuzione di Go 1.18 e Go 1.19 utilizzano un ambiente di esecuzione basato su Ubuntu 22.04. Per ulteriori informazioni, consulta Ambiente di esecuzione di Cloud Functions.
Struttura del codice sorgente
Affinché Cloud Functions trovi la definizione della tua funzione, ogni runtime deve avere determinati requisiti di struttura per il codice sorgente. Per ulteriori informazioni, consulta la sezione Scrittura di funzioni Cloud Functions.
Specifica delle dipendenze
Cloud Functions in Go deve fornire tutte le sue dipendenze tramite moduli Go con un file go.mod
o una directory vendor
. Per ulteriori informazioni, consulta la sezione Specificare le dipendenze in Go.
Variabili di ambiente
I runtime Go 1.13 e versioni successive impostano automaticamente meno variabili di ambiente rispetto ai runtime precedenti supportati da Cloud Functions. Per maggiori dettagli, consulta Utilizzo delle variabili di ambiente.
Inizializzazione una tantum
Le tue funzioni potrebbero dover eseguire l'inizializzazione una tantum, ad esempio la creazione di client API e la configurazione dell'accesso al database. Puoi farlo in diversi modi:
Utilizzare una funzione
func init()
per inizializzare i valori all'avvio di una nuova istanza della funzione. Tieni presente che il codice nella funzionefunc init()
viene eseguito prima che la funzione riceva la prima richiesta.Utilizza la funzione
sync.Once.Do()
per eseguire il codice una volta per istanza di Cloud Functions. Ciò è utile nei casi in cui vuoi inizializzare solo on demand piuttosto che quando l'istanza di funzione viene avviata per la prima volta. Ad esempio, potresti dover inizializzare un client di database solo in determinate circostanze.
context.Context
Il pacchetto context
Go definisce il tipo Context
, che prevede scadenze, indicatori di annullamento e altri valori con ambito di richiesta oltre i confini API e tra i processi.
I client API che sopravvivono a una determinata chiamata di funzione devono essere inizializzati con un valore context.Context
globale, ad esempio quello creato dalla funzione context.Background()
.
Per ottimizzare il rendimento, puoi inizializzare un client nell'ambito globale. Questo client e il relativo contesto potrebbero rimanere per tutta la durata di una determinata istanza di funzione.
Devi utilizzare il contesto di chiamata della funzione solo per oggetti o operazioni che rientrano nel lifetime di una specifica chiamata a funzione.
Il contesto di chiamata potrebbe essere annullato in qualsiasi momento dopo il termine dell'esecuzione della funzione, il che significa che i client inizializzati utilizzando questo contesto potrebbero essere chiusi. Il contesto di chiamata della funzione è accessibile tramite gli argomenti della funzione: di solito r.Context()
per le funzioni HTTP e ctx
per le funzioni in background.
Guarda il seguente codice per un esempio di utilizzo di un client Pub/Sub:
Go 1.16
La versione 1.16 introduce modifiche alla gestione delle dipendenze. In particolare, ora funziona in modalità "module-aware" per impostazione predefinita, il che significa che il codice sorgente dovrebbe includere un file go.mod
. Le note di rilascio complete sono disponibili all'indirizzo golang.org.
Per supportare i deployment esistenti nelle versioni precedenti alla 1.16 e facilitare il percorso di migrazione:
- Le funzioni senza
go.mod
continueranno a essere supportate. - Le funzioni con
vendor
e senzago.mod
funzioneranno come prima per le versioni precedenti alla 1.16. Cloud Functions aggiungerà il framework delle funzioni se non è invendor
. - Le funzioni con
vendor
ego.mod
sono supportate per Go 1.14 e versioni successive, ma devono avere il framework di Functions ingo.mod
/vendor
. In caso contrario, l'esecuzione della build avrà esito negativo con il seguente errore:
vendored dependencies must include "github.com/GoogleCloudPlatform/functions-framework-go";
if your function does not depend on the module, please add a blank import:
`_ "github.com/GoogleCloudPlatform/functions-framework-go"`
Scopri di più su come
utilizzare la directory vendor
per la tua versione di Go specifica.