Runtime di Go

Panoramica

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

Per informazioni sui runtime in generale e per scoprire quale versione di Ubuntu utilizza ogni runtime Go, consulta Ambiente di esecuzione di Cloud Run Functions.

Seleziona il runtime

Cloud Run Functions supporta diverse versioni di Go, elencate nella pagina Supporto di runtime. Puoi selezionare il runtime Go preferito per la tua funzione durante il deployment:

Se utilizzi Google Cloud CLI, specifica il runtime utilizzando il parametro --runtime con il runtime Go che preferisci. Ad esempio:

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

FLAGS... fa riferimento ad argomenti passati durante il primo deployment della funzione. Per saperne di più sugli argomenti obbligatori e facoltativi, consulta Esegui il deployment di una funzione Cloud Run.

Preparazione della funzione

Puoi scrivere una funzione sulla tua macchina locale e caricarla. Per preparare la tua macchina locale per lo sviluppo con Go, consulta Configurazione di un ambiente di sviluppo Go.

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

Struttura del codice sorgente

Affinché Cloud Run Functions trovi la definizione della tua funzione, il codice sorgente deve seguire una struttura specifica. Per saperne di più, consulta Scrittura di 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 saperne di più, consulta Specifica delle dipendenze in Go.

Variabili di ambiente

Il runtime Go imposta automaticamente alcune variabili di ambiente che la tua funzione può utilizzare in base alle esigenze. Per saperne di più, consulta Utilizzo delle variabili di ambiente.

Tipo di Context

Il pacchetto context di Go definisce il tipo di Context, che contiene scadenze, indicatori di annullamento e altri valori relativi alla richiesta tra i limiti dell'API e tra i processi.

Il seguente codice di Cloud Run Functions 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
}