Runtime Go

Fungsi Cloud Run Anda berjalan di lingkungan yang terdiri dari versi sistem operasi dengan paket add-on, dukungan bahasa, dan library Go Functions Framework yang mendukung dan memanggil fungsi Anda. Lingkungan ini diidentifikasi berdasarkan versi bahasa, dan dikenal sebagai ID runtime.

Persiapan fungsi

Anda dapat menyiapkan fungsi langsung dari Konsol Google Cloud atau menulisnya di komputer lokal, lalu menguploadnya. Guna menyiapkan mesin lokal untuk pengembangan Go, lihat Menyiapkan lingkungan pengembangan Go.

Memilih runtime Anda

Fungsi Cloud Run mendukung beberapa versi Go, yang tercantum di halaman Runtime bahasa dan image dasar yang didukung. Anda dapat memilih runtime Go yang diinginkan untuk fungsi Anda selama deployment.

gcloud

Untuk menggunakan fungsi Cloud Run guna men-deploy fungsi HTTP menggunakan gcloud CLI, lihat Men-deploy menggunakan Google Cloud CLI.

Konsol

Jika Anda menggunakan Konsol Google Cloud, pilih runtime saat membuat dan men-deploy fungsi. Lihat Panduan memulai konsol Google Cloud untuk mengetahui petunjuk mendetail.

Struktur kode sumber

Agar fungsi Cloud Run dapat menemukan definisi fungsi Anda, kode sumber harus mengikuti struktur tertentu. Lihat artikel Menulis fungsi Cloud Run untuk mengetahui informasi selengkapnya.

Menentukan dependensi

Fungsi Cloud Run di Go harus menyediakan semua dependensinya dengan modul Go dan file go.mod, atau dengan direktori vendor. Untuk mengetahui informasi selengkapnya, lihat Menentukan dependensi di Go.

Variabel lingkungan

Runtime Go akan otomatis menetapkan variabel lingkungan tertentu untuk digunakan fungsi Anda sesuai kebutuhan. Untuk mengetahui detailnya, lihat Mengonfigurasi variabel lingkungan.

Jenis Context

Paket context Go menentukan jenis Context, yang memiliki batas waktu, sinyal pembatalan, dan nilai cakupan permintaan lainnya di seluruh batas API dan antar-proses.

Kode berikut menunjukkan contoh akses konteks oleh klien 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
}