このトピックでは、Goランタイム環境でエラーを処理する方法について説明します。
エラーが発生した場合、HTTPレスポンスヘッダーには、X-Fc-error-Type: UnhandledInvocationError
などのX-Fc-Error-Type
が含まれます。 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' }, null ] }
os.Exit(1)
を含むlog.Fatal
などのエラー処理コードを使用します。重要この方法は使用しないことを推奨します。 このメソッドを使用する場合、終了時にエラーメッセージやスタック情報は返されません。
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)' }