Tous les produits
Search
Centre de documentation

Function Compute:Gestion des erreurs

Dernière mise à jour :Aug 12, 2026

Function Compute expose les erreurs d'exécution Go dans le corps de la réponse et les en-têtes HTTP. Pour détecter une erreur, vérifiez l'en-tête de réponse X-Fc-Error-Type, par exemple X-Fc-Error-Type: UnhandledInvocationError. Pour consulter la liste complète des types d'erreurs, reportez-vous à la section Gestion des erreurs de la rubrique Concepts de base.

L'environnement d'exécution Go offre trois méthodes pour renvoyer des informations d'erreur depuis une fonction de gestionnaire.

Format de réponse d'erreur

Chaque méthode génère une structure de corps de réponse différente :

Méthode **errorMessage** **errorType** **stackTrace**
Renvoi d'une error depuis le gestionnaire Chaîne d'erreur Type d'erreur Go (ex. : errorString) Non inclus
Appel de panic Valeur du panic Type Go de la valeur du panic (ex. : string) Inclus
Appel de os.Exit / log.Fatal Message générique de fin de processus Non inclus Non inclus

Renvoyer une erreur depuis le gestionnaire

Renvoyez directement une valeur error depuis la fonction de gestionnaire. Le SDK capture cette erreur et la sérialise dans le corps de la réponse.

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)
}

Corps de la réponse :

{
  "errorMessage": "something is wrong!",
  "errorType": "errorString"
}

Utiliser panic

Appelez panic lorsque la réponse doit inclure une trace de pile. Le SDK intercepte le panic et sérialise la pile de la goroutine dans le tableau stackTrace.

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)
}

Corps de la réponse (certaines trames de pile sont omises) :

{
  "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" }
  ]
}

Éviter os.Exit et log.Fatal

Important

N'utilisez pas os.Exit(1) ni les fonctions qui l'encapsulent, comme log.Fatal. Si le processus se termine ainsi, l'environnement d'exécution ne peut renvoyer ni message d'erreur ni trace de pile. Seul un message générique de fin de processus est retourné, ce qui complique le débogage.

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)
}

Corps de la réponse :

{
  "errorMessage": "Process exited unexpectedly before completing request (duration: 0ms, maxMemoryUsage: 8MB)"
}

Les champs errorType et stackTrace sont absents.