Runtime di Go

Panoramica

La funzione Cloud Functions viene eseguita in un ambiente che comprende una versione del sistema operativo più pacchetti aggiuntivi, il supporto dei linguaggi e la libreria del framework di Functions che supporta e richiama la funzione. Questo ambiente è identificato dalla versione del linguaggio ed è noto come runtime.

Cloud Functions supporta i seguenti runtime Go:

  • Go 1.21 (consigliato)
  • Go 1.20
  • Go 1.19
  • Go 1,18
  • Go 1.16
  • Go 1.13

Per informazioni sui runtime in generale e per sapere quale versione di Ubuntu utilizza ogni runtime Go, consulta l'ambiente di esecuzione di Cloud Functions.

Seleziona il runtime

Devi specificare un runtime Go per eseguire la funzione quando ne esegui il deployment. Per specificare il runtime Go:

gcloud

Se utilizzi Google Cloud CLI, specifica il runtime utilizzando il parametro --runtime con il runtime Go di tua scelta. Ad esempio:

gcloud functions deploy FUNCTION_NAME --runtime go121 FLAGS...

FLAGS... si riferisce agli argomenti passati durante il primo deployment della funzione. Per ulteriori informazioni sugli argomenti obbligatori e facoltativi, consulta Eseguire il deployment con lo strumento gcloud.

Console

Se utilizzi la console Google Cloud, consulta la guida rapida per la console Google Cloud per istruzioni dettagliate.

Preparazione di funzioni

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

Per iniziare a utilizzare rapidamente Go su Cloud Functions, consulta la guida rapida.

Struttura del codice sorgente

Affinché Cloud Functions possa trovare la definizione della tua funzione, il codice sorgente deve seguire una struttura specifica. Per ulteriori informazioni, consulta Scrittura di Cloud Functions.

Specifica delle dipendenze

Cloud Functions in Go deve fornire tutte le dipendenze tramite moduli Go con un file go.mod o una directory vendor. Per ulteriori informazioni, consulta la pagina Specifica delle dipendenze in Go.

Variabili di ambiente

Il runtime Go imposta automaticamente determinate variabili di ambiente per la funzione da utilizzare in base alle esigenze. Per maggiori dettagli, consulta Utilizzare le variabili di ambiente.

Tipo di Context

Il pacchetto context di Go definisce il tipo Context, che porta scadenze, indicatori di annullamento e altri valori basati sulle richieste oltre i confini dell'API e tra i processi.

Il seguente codice di 2ª generazione 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
}