Tüm Ürünler
Search
Belge Merkezi

Function Compute:Hata yönetimi

Son Güncelleme:Oct 08, 2026

Function Compute, Go çalışma zamanı hatalarını yanıt gövdesi ve HTTP üst bilgileri aracılığıyla iletir. Hataları algılamak için X-Fc-Error-Type yanıt üst bilgisini kontrol edin; örneğin: X-Fc-Error-Type: UnhandledInvocationError. Tüm hata türlerinin listesi için Temeller konusundaki Hata yönetimi bölümüne bakın.

Go çalışma zamanı, bir işleyici işlevinden hata bilgisi döndürmek için üç yöntem sunar.

Hata yanıtı biçimi

Her yöntem farklı bir yanıt gövdesi yapısı oluşturur:

Yöntem **errorMessage** **errorType** **stackTrace**
İşleyiciden error döndürme Hata dizesi Go hata türü (ör. errorString) Dahil edilmez
panic çağırma Panic değeri Panic değerinin Go türü (ör. string) Dahil edilir
os.Exit / log.Fatal çağırma Genel süreç çıkış mesajı Dahil edilmez Dahil edilmez

İşleyiciden hata döndürme

İşleyici işlevinden doğrudan bir error değeri döndürün. SDK hatayı yakalar ve yanıt gövdesine serileştirir.

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

Yanıt gövdesi:

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

panic kullanımı

Yanıtın bir yığın izlemesi içermesini istediğinizde panic çağırın. SDK panic'i yakalar ve goroutine yığınını stackTrace dizisine serileştirir.

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

Yanıt gövdesi (bazı yığın çerçeveleri atlanmıştır):

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

os.Exit ve log.Fatal kullanımından kaçının

Önemli

os.Exit(1) veya bunu saran log.Fatal gibi işlevleri kullanmayın. Süreç bu şekilde sonlandığında çalışma zamanı hata mesajı veya yığın izlemesi döndüremez; yalnızca genel bir süreç çıkış mesajı döndürülür ve bu durum hata ayıklamayı zorlaştırır.

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

Yanıt gövdesi:

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

errorType veya stackTrace alanları dahil edilmez.