Runtime Go

Ringkasan

Cloud Function 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 Cloud Functions.

Memilih runtime Anda

Cloud Functions 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 go121 FLAGS...

FLAGS... merujuk pada argumen yang diteruskan selama deployment pertama fungsi Anda. Untuk informasi selengkapnya terkait 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 Cloud Functions dengan cepat, lihat Panduan Memulai.

Struktur kode sumber

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

Menentukan dependensi

Cloud Functions 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 generasi ke-2 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
}