全部产品
Search
文档中心

Function Compute:Konteks

更新时间:Jul 02, 2025

Topik ini menjelaskan konteks dalam runtime Go di Function Compute dan menyediakan contoh kode.

Apa itu konteks?

Ketika Function Compute menjalankan kode fungsi Anda, ia meneruskan objek konteks context.Context ke penanganan. Objek ini berisi informasi tentang pemanggilan, layanan, fungsi, analisis pelacakan, dan lingkungan runtime.

Anda dapat menggunakan objek konteks sebagai parameter input untuk penanganan acara dan penanganan HTTP. Format serta isi parameter input konteks untuk kedua jenis penanganan tersebut sama. Tabel berikut menggambarkan parameter yang didukung oleh objek konteks.
Tabel 1. Konteks
ParameterDeskripsi
Variabel
RequestIDID unik dari permintaan untuk memanggil fungsi. Anda dapat mencatat ID ini untuk pemecahan masalah jika terjadi kesalahan.
Kredensial

Pasangan AccessKey sementara yang diperoleh Function Compute dengan mengasumsikan peran layanan tertaut Anda. Pasangan AccessKey sementara ini berlaku selama 36 jam. Anda dapat menggunakan kredensial dalam kode Anda untuk mengakses layanan terkait seperti Object Storage Service (OSS). Dengan cara ini, Anda dapat mengakses layanan tanpa perlu menulis pasangan AccessKey Anda dalam kode fungsi. Untuk informasi lebih lanjut, lihat Berikan izin Function Compute untuk mengakses layanan Alibaba Cloud lainnya.

FungsiInformasi dasar tentang fungsi yang dipanggil, seperti nama, penanganan, memori, dan periode timeout fungsi.
LayananInformasi tentang layanan tempat fungsi tersebut berada, seperti nama, proyek terkait dan penyimpanan log di Log Service, versi, dan alias layanan. Parameter qualifier menentukan versi atau alias layanan. Parameter version_id menentukan versi layanan.
WilayahID wilayah tempat fungsi dipanggil. Sebagai contoh, jika fungsi dipanggil di wilayah China (Shanghai), ID wilayahnya adalah cn-shanghai. Untuk informasi lebih lanjut, lihat Endpoints.
AccountIdID akun Alibaba Cloud yang digunakan untuk memanggil fungsi.
Metode
deadlinePeriode timeout eksekusi fungsi. Nilainya dalam format timestamp UNIX. Unit: milidetik.

Untuk informasi lebih lanjut tentang struktur data lengkap, lihat context.go.

Contoh kode

Contoh kode untuk menampilkan informasi konteks

Tambahkan parameter konteks ke penanganan fungsi Anda. Function Compute meneruskan informasi variabel yang dijelaskan dalam tabel Konteks sebelumnya ke parameter konteks. Kemudian, impor paket aliyun/fc-runtime-go-sdk/fccontext dan panggil metode fccontext.FromContext untuk mendapatkan fccontext.

package main

import (
    "context"
    "encoding/json"
    "log"

    "github.com/aliyun/fc-runtime-go-sdk/fc"
    "github.com/aliyun/fc-runtime-go-sdk/fccontext"
)

func main() {
    fc.Start(echoContext)
}

func echoContext(ctx context.Context) (string, error) {
    fctx, _ := fccontext.FromContext(ctx)
    log.Println(fctx.AccountId)
    log.Printf("%#v\n", fctx)
    res, _ := json.Marshal(fctx)
    return string(res), nil
}

Contoh kode untuk mendapatkan waktu eksekusi tersisa dari sebuah fungsi

Kode sampel berikut memberikan contoh cara menggunakan parameter deadline untuk mendapatkan waktu eksekusi tersisa dari sebuah fungsi:

package main

import (
    "context"
    "fmt"
    "log"
    "time"

    "github.com/aliyun/fc-runtime-go-sdk/fc"
)

func LongRunningHandler(ctx context.Context) (string, error) {
    deadline, _ := ctx.Deadline()
    fmt.Printf("sekarang: %s\nbatas waktu: %s\n", time.Now().String(), deadline.String())
    deadline = deadline.Add(-100 * time.Millisecond)
    timeoutChannel := time.After(time.Until(deadline))

    for {
        select {
        case <-timeoutChannel:
            return "Selesai sebelum batas waktu.", nil
        default:
            log.Print("halo!")
            time.Sleep(50 * time.Millisecond)
        }
    }
}

func main() {
    fc.Start(LongRunningHandler)
}