Todos os produtos
Search
Central de documentação

Function Compute:Tratamento de erros

Última atualização: Jun 29, 2026

O Function Compute expõe erros do runtime Go no corpo da resposta e nos cabeçalhos HTTP. Para detectar erros, verifique o cabeçalho de resposta X-Fc-Error-Type — por exemplo, X-Fc-Error-Type: UnhandledInvocationError. Para obter a lista completa de tipos de erro, consulte a seção Tratamento de erros no tópico Conceitos básicos.

O runtime Go oferece três formas de retornar informações de erro em uma função handler.

Formato da resposta de erro

Cada método gera uma estrutura diferente no corpo da resposta:

Método

**errorMessage**

**errorType**

**stackTrace**

Retorno de error no handler

String de erro

Tipo de erro Go (ex.: errorString)

Não incluído

Chamada de panic

Valor do panic

Tipo Go do valor do panic (ex.: string)

Incluído

Chamada de os.Exit / log.Fatal

Mensagem genérica de saída do processo

Não incluído

Não incluído

Retornar um erro no handler

Retorne um valor error diretamente na função handler. O SDK captura o erro e o serializa no corpo da resposta.

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

Corpo da resposta:

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

Usar panic

Use panic quando precisar incluir um stack trace na resposta. O SDK intercepta o panic e serializa a pilha da goroutine no array 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)
}

Corpo da resposta (alguns frames da pilha omitidos):

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

Evitar os.Exit e log.Fatal

Importante

Não use os.Exit(1) nem funções que o encapsulem, como log.Fatal. Se o processo terminar dessa forma, o runtime não conseguirá retornar uma mensagem de erro ou stack trace. O sistema devolverá apenas uma mensagem genérica de saída do processo, o que dificulta a depuração.

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

Corpo da resposta:

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

Os campos errorType e stackTrace não estão incluídos.