Runtime Go

Ringkasan

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

Untuk informasi tentang runtime secara umum, dan untuk mempelajari versi Ubuntu yang digunakan setiap runtime Go, lihat lingkungan eksekusi fungsi Cloud Run.

Memilih runtime Anda

Fungsi Cloud Run mendukung beberapa versi Go, yang tercantum di halaman Dukungan runtime. Anda dapat memilih runtime Go yang diinginkan untuk fungsi Anda selama deployment.

gcloud

Jika menggunakan Google Cloud CLI, tentukan runtime menggunakan parameter --runtime dengan runtime Go pilihan Anda. Contoh:

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

FLAGS... merujuk pada argumen yang diteruskan selama deployment pertama fungsi Anda. Untuk mengetahui informasi selengkapnya mengenai argumen yang diperlukan dan opsional, lihat Men-deploy menggunakan Google Cloud CLI.

Konsol

Jika Anda menggunakan Google Cloud Console, lihat panduan memulai Google Cloud Console untuk mengetahui petunjuk mendetail.

Persiapan fungsi

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

Untuk mulai menggunakan Go di fungsi Cloud Run dengan cepat, lihat Panduan memulai.

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 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 Menggunakan 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
}