Topik ini menjelaskan penggunaan lingkungan runtime Go di Function Compute untuk menulis kode serta memberikan contoh implementasi dari konteks tersebut.
Apa itu konteks?
Saat Function Compute mengeksekusi suatu fungsi, objek konteks context.Context diteruskan ke penanganan yang digunakan untuk mengeksekusi fungsi tersebut. Konteks ini mencakup informasi tentang pemanggilan, layanan, fungsi, analisis pelacakan, dan lingkungan runtime.
Tabel berikut menjelaskan parameter yang terdapat dalam konteks.
Parameter | Deskripsi |
Variabel | |
RequestID | ID unik dari permintaan yang digunakan untuk memanggil fungsi. Anda dapat mencatat ID ini untuk pemecahan masalah jika terjadi kesalahan. |
Credentials | Setelah Anda mengonfigurasi peran untuk suatu fungsi, Function Compute mendapatkan satu set kunci sementara melalui API AssumeRole. Kunci-kunci 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 dalam Layanan Log Sederhana, versi, serta alias layanan tersebut. Parameter |
Wilayah | ID wilayah tempat fungsi dipanggil. Sebagai contoh, jika fungsi dipanggil di wilayah Tiongkok (Shanghai), ID wilayahnya adalah cn-shanghai. Untuk informasi lebih lanjut, lihat Titik akhir layanan. |
AccountId | ID akun Alibaba Cloud tempat fungsi tersebut berada. |
Metode | |
deadline | Periode timeout eksekusi fungsi. Nilainya adalah timestamp UNIX. Satuan: milidetik. |
Untuk detail lebih lanjut mengenai struktur data lengkapnya, lihat fc-runtime-go-sdk di GitHub.
Contoh kode
Contoh kode untuk menampilkan informasi konteks
Tambahkan parameter context ke handler suatu fungsi. Function Compute meneruskan variabel-variabel yang dijelaskan dalam tabel Konteks sebelumnya ke parameter context. 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 durasi eksekusi tersisa dari suatu fungsi
Contoh kode berikut menunjukkan cara menggunakan parameter deadline untuk mendapatkan durasi eksekusi tersisa dari suatu 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 waktu habis.", nil
default:
log.Print("halo!")
time.Sleep(50 * time.Millisecond)
}
}
}
func main() {
fc.Start(LongRunningHandler)
}