このトピックでは、Goランタイム環境でエラーを処理する方法について説明します。
エラーが発生した場合、関数呼び出しに対する応答のHTTPヘッダーには、エラーの種類を示すX-Fc-error-Type
フィールドが含まれます。 例: X-Fc-Error-Type: UnhandledInvocationError
Function Computeのエラータイプの詳細については、「基本」トピックの「エラー処理」をご参照ください。
次の項目は、Function Computeがエラー情報を返すために使用するメソッドを示しています。
ハンドラ関数でエラー情報を返します。 サンプルコード:
package main import ( "errors" "fmt" "github.com/aliyun/fc-runtime-go-sdk/fc" ) func HandleRequest() error { fmt.Println("hello world") return errors.New("something is wrong") } func main() { fc.Start(HandleRequest) }
関数が呼び出されると、次のレスポンスが返されます。
{ "errorMessage": "something is wrong!", "errorType": "errorString" }
パニックを使用してエラー情報を返します。 サンプルコード:
package main import ( "fmt" "github.com/aliyun/fc-runtime-go-sdk/fc" ) func HandleRequest() error { fmt.Println("hello world") panic("Error: something is wrong") return nil } func main() { fc.Start(HandleRequest) }
関数が呼び出されると、次の応答が返されます。 この例では、一部のスタック情報が省略される。
{ errorMessage: 'Error: something is wrong', 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' } ] }
log.Fatal
など、os.Exit(1)
を含むエラーコードを使用します。重要この方法は使用しないことを推奨します。 このメソッドを使用する場合、終了時にエラーメッセージやスタック情報は返されません。
package main import ( "fmt" "log" "github.com/aliyun/fc-runtime-go-sdk/fc" ) func HandleRequest() error { fmt.Println("hello world") log.Fatal("something is wrong") return nil } func main() { fc.Start(HandleRequest) }
関数が呼び出されると、次のレスポンスが返されます。
{ errorMessage: 'Process exited unexpectedly before completing request (duration: 0ms, maxMemoryUsage: 8MB)' }