O tempo de execução do Go

Visão geral

A função do Cloud Run é executada em um ambiente que consiste em uma versão do sistema operacional, além de pacotes complementares, suporte a linguagens e a biblioteca do Functions Framework que dá suporte e invoca a função. Esse ambiente é identificado pela versão da linguagem e conhecido como ambiente de execução.

Para mais informações sobre tempos de execução em geral e para saber qual versão do Ubuntu cada ambiente de execução Go usa, consulte o ambiente de execução do Cloud Run functions.

Selecionar o ambiente de execução

As funções do Cloud Run dão suporte a várias versões do Go, que estão listadas na página Suporte ao ambiente de execução. Selecione seu ambiente de execução Go preferencial para a função durante a implantação.

gcloud

Se você estiver usando a Google Cloud CLI, especifique o ambiente de execução usando o parâmetro --runtime com o ambiente de execução do Go de sua escolha. Por exemplo:

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

FLAGS... refere-se a argumentos transmitidos durante a primeira implantação da função. Para mais informações sobre argumentos obrigatórios e opcionais, consulte Implantação com a CLI do Google Cloud.

Console

Se você estiver usando o console do Google Cloud, consulte o Guia de início rápido do console do Google Cloud para conferir instruções detalhadas.

Preparação de funções

É possível preparar uma função diretamente do console do Google Cloud ou gravá-la na máquina local e fazer upload dela. Para preparar a máquina local para desenvolvimento do Go, consulte Como configurar um ambiente de desenvolvimento do Go.

Para começar rapidamente a usar o Go no Cloud Run functions, consulte o Guia de início rápido.

Estrutura do código-fonte

Para que as funções do Cloud Run encontrem a definição da sua função, seu código-fonte precisa seguir uma estrutura específica. Consulte Como escrever funções do Cloud Run para mais informações.

Como especificar dependências

O Cloud Run functions no Go precisa fornecer todas as respectivas dependências com módulos Go e um arquivo go.mod ou com um diretório vendor. Para mais informações, consulte Como especificar dependências no Go.

Variáveis de ambiente

O ambiente de execução do Go define automaticamente certas variáveis de ambiente para que sua função use conforme necessário. Para detalhes, consulte Como usar variáveis de ambiente.

Context tipo

O pacote context do Go define o tipo de Context, que transporta prazos, sinais de cancelamento e outros valores do escopo de solicitações entre limites de APIs e entre processos.

O código a seguir mostra um exemplo de acesso ao contexto por um cliente do 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
}