O tempo de execução do Go

A sua função do Cloud Run é executada num ambiente que consiste numa versão do sistema operativo com pacotes suplementares, suporte de idiomas e a biblioteca Go Functions Framework que suporta e invoca a sua função. Este ambiente é identificado pela versão do idioma e é conhecido como o ID de tempo de execução.

Preparação da função

Pode preparar uma função diretamente a partir da Google Cloud consola ou escrevê-la no seu computador local e carregá-la. Para preparar o seu computador local para o desenvolvimento em Go, consulte o artigo Configure um ambiente de desenvolvimento em Go.

Imagens base e tempos de execução do Go suportados

Tempo de execução ID do ambiente de execução Camadas Imagem base do tempo de execução
Go 1.25
(apenas pré-visualização)
go125
  • google-22 (predefinição)
  • google-22-full
  • google-22/go125
  • google-22-full/go125
  • Go 1.24 go124
  • google-22 (predefinição)
  • google-22-full
  • google-22/go124
  • google-22-full/go124
  • Go 1.23
    go123
  • google-22 (predefinição)
  • google-22-full
  • google-22/go123
  • google-22-full/go123
  • Go 1.22 go122
  • google-22 (predefinição)
  • google-22-full
  • google-22/go122
  • google-22-full/go122
  • Go 1.21 go121
  • google-22 (predefinição)
  • google-22-full
  • google-22/go121
  • google-22-full/go121
  • Go 1.20 go120
  • google-22 (predefinição)
  • google-22-full
  • google-22/go120
  • google-22-full/go120
  • Go 1.19 go119
  • google-22 (predefinição)
  • google-22-full
  • google-22/go119
  • google-22-full/go119
  • Go 1.18 go118
  • google-22 (predefinição)
  • google-22-full
  • google-22/go118
  • google-22-full/go120
  • Go 1.16 go116 google-18-full google-18-full/go116
    Go 1.13 go113 google-18-full google-18-full/go113
    Go 1.11 go111 Desativado Desativado

    Selecione o tempo de execução

    Pode selecionar um dos tempos de execução do Go suportados para a sua função durante a implementação.

    Pode selecionar uma versão de tempo de execução através da Google Cloud consola ou da CLI gcloud. Clique no separador para ver instruções sobre como usar a ferramenta da sua escolha:

    gcloud

    Especifique a imagem base do Go para a sua função através da flag --base-image ao implementar a função. Por exemplo:

    gcloud run deploy FUNCTION \
        --source . \
        --function FUNCTION_ENTRYPOINT \
        --base-image go124
    

    Substituir:

    • FUNCTION com o nome da função que está a implementar. Pode omitir este parâmetro por completo, mas é-lhe pedido o nome se o omitir.

    • FUNCTION_ENTRYPOINT com o ponto de entrada da sua função no código-fonte. Este é o código que o Cloud Run executa quando a sua função é executada. O valor desta flag tem de ser um nome de função ou um nome de classe totalmente qualificado que exista no seu código-fonte.

    Para obter instruções detalhadas sobre a implementação de uma função através da CLI gcloud, consulte o artigo Implemente funções no Cloud Run.

    Consola

    Pode selecionar uma versão de tempo de execução quando cria ou atualiza uma função do Cloud Run na Google Cloud consola. Para ver instruções detalhadas sobre como implementar uma função, consulte o artigo Implemente funções no Cloud Run.

    Para selecionar um tempo de execução na Google Cloud consola quando cria uma função, siga estes passos:

    1. Na Google Cloud consola, aceda à página do Cloud Run:

      Aceda ao Cloud Run

    2. Clique em Escrever uma função.

    3. Na lista Tempo de execução, selecione uma versão do tempo de execução do Go.

    4. Clique em Criar e aguarde que o Cloud Run crie o serviço com uma revisão de marcador de posição.

    5. A consola redireciona para o separador Origem, onde pode ver o código-fonte da sua função. Clique em Guardar e voltar a implementar.

    Para obter instruções detalhadas sobre como atualizar a versão do tempo de execução após a implementação da função, consulte o artigo Volte a implementar um novo código-fonte.

    Estrutura do código-fonte

    Para que as funções do Cloud Run encontrem a definição da sua função, o código fonte tem de seguir uma estrutura específica. Consulte o artigo Escreva funções do Cloud Run para mais informações.

    Especifique dependências

    As funções do Cloud Run em Go têm de fornecer todas as respetivas dependências com módulos Go e um ficheiro go.mod ou com um diretório vendor. Para mais informações, consulte o artigo Especifique dependências no Go.

    Variáveis de ambiente

    O tempo de execução do Go define automaticamente determinadas variáveis de ambiente para a sua função usar conforme necessário. Para ver detalhes, consulte o artigo Configure variáveis de ambiente.

    Context tipo

    O pacote contextGo define o tipo Context que contém prazos, sinais de cancelamento e outros valores com âmbito de pedido nos limites da API e entre processos.

    O código seguinte mostra um exemplo de acesso ao contexto por parte de 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
    }