Topik ini menjelaskan cara menangani kesalahan dalam lingkungan runtime Go.
Ketika terjadi kesalahan, header HTTP dari respons terhadap pemanggilan fungsi berisi bidang X-Fc-Error-Type, yang menunjukkan jenis kesalahan. Contoh: X-Fc-Error-Type: UnhandledInvocationError. Untuk informasi lebih lanjut tentang jenis kesalahan pada Function Compute, lihat bagian "Penanganan Kesalahan" dari topik Dasar.
Berikut adalah metode-metode yang digunakan oleh Function Compute untuk mengembalikan informasi kesalahan:
Mengembalikan informasi kesalahan dalam fungsi penanganan. Contoh kode:
package main import ( "errors" "fmt" "github.com/aliyun/fc-runtime-go-sdk/fc" ) func HandleRequest() error { fmt.Println("hello world") return errors.New("terjadi kesalahan") } func main() { fc.Start(HandleRequest) }Ketika fungsi dipanggil, respons berikut dikembalikan:
{ "errorMessage": "terjadi kesalahan!", "errorType": "errorString" }Gunakan panic untuk mengembalikan informasi kesalahan. Contoh kode:
package main import ( "fmt" "github.com/aliyun/fc-runtime-go-sdk/fc" ) func HandleRequest() error { fmt.Println("hello world") panic("Kesalahan: terjadi kesalahan") return nil } func main() { fc.Start(HandleRequest) }Ketika fungsi dipanggil, respons berikut dikembalikan. Dalam contoh ini, beberapa informasi stack dihilangkan.
{ errorMessage: 'Kesalahan: terjadi kesalahan', errorType: 'string', stackTrace: [ { path: 'github.com/aliyun/fc-runtime-go-sdk/fc/errors.go', line: 39, label: 'fcPanicResponse' }, { path: 'github.com/aliyun/fc-runtime-go-sdk/fc/function.go', line: 84, label: '(*Function).Invoke.func1' }, ... ... ... { path: 'code/main.go', line: 22, label: 'main' }, { path: 'runtime/proc.go', line: 255, label: 'main' }, { path: 'runtime/asm_amd64.s', line: 1581, label: 'goexit' } ] }Gunakan kode kesalahan yang berisi
os.Exit(1), sepertilog.Fatal.nullKami menyarankan agar Anda tidak menggunakan metode ini. Jika Anda menggunakan metode ini, tidak ada pesan kesalahan atau informasi stack yang dikembalikan saat keluar.
package main import ( "fmt" "log" "github.com/aliyun/fc-runtime-go-sdk/fc" ) func HandleRequest() error { fmt.Println("hello world") log.Fatal("terjadi kesalahan") return nil } func main() { fc.Start(HandleRequest) }Ketika fungsi dipanggil, respons berikut dikembalikan:
{ errorMessage: 'Proses keluar secara tak terduga sebelum menyelesaikan permintaan (durasi: 0ms, penggunaan memori maksimum: 8MB)' }