Entorno de ejecución de Go

Información general

Tu función de Cloud Run se ejecuta en un entorno que consta de una versión del sistema operativo, además de paquetes complementarios, compatibilidad con idiomas y la biblioteca Functions Framework, que admite e invoca tu función. Este entorno se identifica por la versión de idioma y se conoce como el tiempo de ejecución.

Para obtener información sobre los tiempos de ejecución en general y saber qué versión de Ubuntu usa cada tiempo de ejecución de Go, consulta el entorno de ejecución de Cloud Functions.

Selecciona tu tiempo de ejecución

Cloud Run Functions admite varias versiones de Go, que se indican en la página Compatibilidad con el entorno de ejecución. Puedes seleccionar el entorno de ejecución de Go que prefieras para tu función durante la implementación.

gcloud

Si usas la CLI de Google Cloud, especifica el tiempo de ejecución con el parámetro --runtime y el tiempo de ejecución de Go que quieras. Por ejemplo:

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

FLAGS... hace referencia a los argumentos que se transfieren durante la primera implementación de la función. Para obtener más información sobre los argumentos obligatorios y opcionales, consulta el artículo Desplegar una función de Cloud Run.

Consola

Si usas la Google Cloud consola, consulta la Google Cloud guía de inicio rápido de la consola para obtener instrucciones detalladas.

Preparación de la función

Puedes preparar una función directamente desde la Google Cloud consola o escribirla en tu máquina local y subirla. Para preparar tu máquina local para el desarrollo en Go, consulta el artículo Configurar un entorno de desarrollo en Go.

Para empezar a usar Go rápidamente en funciones de Cloud Run, consulta la guía de inicio rápido.

Estructura del código fuente

Para que las funciones de Cloud Run encuentren la definición de tu función, el código fuente debe seguir una estructura específica. Para obtener más información, consulta el artículo sobre cómo escribir funciones de Cloud Run.

Especificar dependencias

Las funciones de Cloud Run en Go deben proporcionar todas sus dependencias con módulos de Go y un archivo go.mod o con un directorio vendor. Para obtener más información, consulta Especificar dependencias en Go.

Variables de entorno

El tiempo de ejecución de Go define automáticamente determinadas variables de entorno para que tu función las use según sea necesario. Para obtener más información, consulta el artículo Usar variables de entorno.

Tipo de Context

El contextpaquetede Go define el Context tipo, que incluye plazos, señales de cancelación y otros valores de ámbito de solicitud entre límites de API y entre procesos.

El siguiente código de funciones de Cloud Run muestra un ejemplo de acceso al contexto por parte de un cliente de 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
}