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.
| Parameter | Deskripsi |
| Variabel | |
| RequestID | ID 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 |
| Fungsi | Informasi dasar tentang fungsi yang dipanggil, seperti nama, penanganan, memori, dan periode timeout fungsi. |
| Layanan | Informasi 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. |
| Wilayah | ID wilayah tempat fungsi dipanggil. Sebagai contoh, jika fungsi dipanggil di wilayah China (Shanghai), ID wilayahnya adalah cn-shanghai. Untuk informasi lebih lanjut, lihat Endpoints. |
| AccountId | ID akun Alibaba Cloud yang digunakan untuk memanggil fungsi. |
| Metode | |
| deadline | Periode 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)
}