すべてのプロダクト
Search
ドキュメントセンター

Function Compute:エラー処理

最終更新日:Sep 02, 2024

このトピックでは、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)'
    }