Il runtime di Go

La funzione Cloud Run viene eseguita in un ambiente costituito da una versione del sistema operativo con pacchetti aggiuntivi, supporto per le lingue e la libreria Go Functions Framework che supporta e richiama la funzione. Questo ambiente viene 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, consulta Configurare un ambiente di sviluppo Go.

Seleziona il runtime

Le funzioni Cloud Run supportano diverse versioni di Go, elencate nella pagina Ambienti di runtime e immagini di base dei linguaggi supportati. Puoi selezionare il runtime Go preferito per la tua funzione durante il deployment.

gcloud

Per utilizzare le funzioni Cloud Run per eseguire il deployment di una funzione HTTP utilizzando la gcloud CLI, consulta Eseguire il deployment utilizzando la CLI Google Cloud.

Console

Se utilizzi la console Google Cloud, seleziona il runtime quando crei ed esegui il deployment della funzione. Per istruzioni dettagliate, consulta la guida rapida alla console Google Cloud.

Struttura del codice sorgente

Affinché le funzioni Cloud Run trovino la definizione della funzione, il codice sorgente deve seguire una struttura specifica. Per ulteriori informazioni, consulta Scrivere funzioni Cloud Run.

Specifica delle dipendenze

Le funzioni Cloud Run in Go devono fornire tutte le dipendenze con 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 determinate variabili di ambiente per la funzione da utilizzare in base alle esigenze. Per maggiori dettagli, consulta Configurare le variabili di ambiente.

Tipo di Context

Il pacchetto context di Go definisce il tipo Context, che trasporta scadenze, indicatori di annullamento e altri valori basati sulla richiesta tra i confini 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
}