Il runtime di Go

La tua funzione Cloud Run viene eseguita in un ambiente costituito da una versione del sistema operativo con pacchetti aggiuntivi, supporto linguistico e la libreria Go Functions Framework che supporta e richiama la tua funzione. Questo ambiente è identificato dalla versione della lingua ed è noto come ID runtime.

Preparazione della funzione

Puoi preparare una funzione direttamente dalla console Google Cloud o scriverla sulla tua macchina locale e caricarla. Per preparare la tua macchina locale per lo sviluppo in Go, vedi Configurare un ambiente di sviluppo Go.

Runtime Go e immagini di base supportati

Runtime ID runtime Stack Immagine di base runtime
Go 1.24
(solo anteprima)
go124
  • google-22 (valore predefinito)
  • google-22-full
  • google-22/go124
  • google-22-full/go124
  • Go 1.23
    go123
  • google-22 (valore predefinito)
  • google-22-full
  • google-22/go123
  • google-22-full/go123
  • Go 1.22 go122
  • google-22 (valore predefinito)
  • google-22-full
  • google-22/go122
  • google-22-full/go122
  • Go 1.21 go121
  • google-22 (valore predefinito)
  • google-22-full
  • google-22/go121
  • google-22-full/go121
  • Go 1.20 go120
  • google-22 (valore predefinito)
  • google-22-full
  • google-22/go120
  • google-22-full/go120
  • Go 1.19 go119
  • google-22 (valore predefinito)
  • google-22-full
  • google-22/go119
  • google-22-full/go119
  • Go 1.18 go118
  • google-22 (valore predefinito)
  • google-22-full
  • google-22/go118
  • google-22-full/go120
  • Go 1.16 go116 google-18-full google-18-full/go116
    Go 1.13 go113 google-18-full google-18-full/go113
    Go 1.11 go111 Dismesso Dismesso

    Seleziona il runtime

    Puoi selezionare uno dei runtime Go supportati per la tua funzione durante il deployment.

    Puoi selezionare una versione del runtime utilizzando la console Google Cloud o gcloud CLI. Fai clic sulla scheda per visualizzare le istruzioni sull'utilizzo dello strumento che preferisci:

    gcloud

    Specifica l'immagine di base Go per la funzione utilizzando il flag --base-image durante il deployment della funzione. Ad esempio:

    gcloud run deploy FUNCTION \
        --source . \
        --function FUNCTION_ENTRYPOINT \
        --base-image go123
    

    Sostituisci:

    • FUNCTION con il nome della funzione che stai eseguendo il deployment. Puoi omettere completamente questo parametro, ma ti verrà chiesto il nome se lo ometti.

    • FUNCTION_ENTRYPOINT con l'entry point della tua funzione nel codice sorgente. Questo è il codice eseguito da Cloud Run quando viene eseguita la funzione. Il valore di questo flag deve essere un nome di funzione o un nome di classe completo che esiste nel codice sorgente.

    Per istruzioni dettagliate sul deployment di una funzione utilizzando gcloud CLI, vedi Eseguire il deployment delle funzioni in Cloud Run.

    Console

    Puoi selezionare una versione del runtime quando crei o aggiorni una funzione Cloud Run nella Google Cloud console. Per istruzioni dettagliate sul deployment di una funzione, consulta Eseguire il deployment di funzioni in Cloud Run.

    Per selezionare un runtime nella console Google Cloud quando crei una funzione:

    1. Nella console Google Cloud , vai alla pagina Cloud Run:

      Vai a Cloud Run

    2. Fai clic su Scrivi una funzione.

    3. Nell'elenco Runtime, seleziona una versione del runtime Go.

    4. Fai clic su Crea e attendi che Cloud Run crei il servizio utilizzando una revisione segnaposto.

    5. La console ti reindirizzerà alla scheda Origine, dove potrai visualizzare il codice sorgente della tua funzione. Fai clic su Salva e ridistribuisci.

    Per istruzioni dettagliate sull'aggiornamento della versione del runtime dopo il deployment della funzione, consulta Eseguire nuovamente il deployment del nuovo codice sorgente.

    Struttura del codice sorgente

    Affinché le funzioni Cloud Run trovino la definizione della tua funzione, il codice sorgente deve seguire una struttura specifica. Per saperne di più, consulta Scrivere funzioni Cloud Run.

    Specifica delle dipendenze

    Le funzioni Cloud Run in Go devono fornire tutte le dipendenze con i moduli Go e un file go.mod o con una directory vendor. Per maggiori informazioni, consulta Specificare le dipendenze in Go.

    Variabili di ambiente

    Il runtime Go imposta automaticamente alcune variabili di ambiente per la tua funzione da utilizzare in base alle esigenze. Per maggiori dettagli, vedi Configurare le variabili di ambiente.

    Tipo di Context

    Il pacchetto context di Go definisce il Context tipo, che include scadenze, indicatori di annullamento e altri valori ambito della richiesta tra i limiti delle API e tra i processi.

    Il seguente codice mostra un esempio di accesso al contesto da parte di un client Pub/Sub:

    
    // Package helloworld provides a set of Cloud Functions samples.
    package helloworld
    
    import (
    	"context"
    	"fmt"
    	"log"
    
    	"github.com/GoogleCloudPlatform/functions-framework-go/functions"
    	"github.com/cloudevents/sdk-go/v2/event"
    )
    
    func init() {
    	functions.CloudEvent("HelloPubSub", helloPubSub)
    }
    
    // MessagePublishedData contains the full Pub/Sub message
    // See the documentation for more details:
    // https://cloud.google.com/eventarc/docs/cloudevents#pubsub
    type MessagePublishedData struct {
    	Message PubSubMessage
    }
    
    // PubSubMessage is the payload of a Pub/Sub event.
    // See the documentation for more details:
    // https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage
    type PubSubMessage struct {
    	Data []byte `json:"data"`
    }
    
    // helloPubSub consumes a CloudEvent message and extracts the Pub/Sub message.
    func helloPubSub(ctx context.Context, e event.Event) error {
    	var msg MessagePublishedData
    	if err := e.DataAs(&msg); err != nil {
    		return fmt.Errorf("event.DataAs: %w", err)
    	}
    
    	name := string(msg.Message.Data) // Automatically decoded from base64.
    	if name == "" {
    		name = "World"
    	}
    	log.Printf("Hello, %s!", name)
    	return nil
    }