Topik ini menjelaskan cara menangani kesalahan dalam lingkungan runtime Go.
Jika terjadi kesalahan, header respons HTTP berisi X-Fc-Error-Type, seperti X-Fc-Error-Type: UnhandledInvocationError. Untuk informasi lebih lanjut tentang jenis kesalahan dari Function Compute, lihat Penanganan Kesalahan.
Function Compute dapat mengembalikan kesalahan dengan cara berikut:
- Tentukan pesan kesalahan yang akan dikembalikan 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) }Setelah fungsi dipanggil, respons berikut dikembalikan:
{ "errorMessage": "terjadi kesalahan!", "errorType": "errorString" } - Gunakan panic untuk mengembalikan pesan 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) }Setelah 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' }, null ] } - Gunakan kode penanganan kesalahan seperti
log.Fatalyang berisios.Exit(1).null Kami 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) }Setelah fungsi dipanggil, respons berikut dikembalikan:
{ errorMessage: 'Proses keluar secara tak terduga sebelum menyelesaikan permintaan (durasi: 0ms, penggunaan memori maksimum: 8MB)' }