All Products
Search
Document Center

Function Compute:Penanganan error

Last Updated:Apr 02, 2026

Topik ini menjelaskan cara menangani error di lingkungan runtime Go.

Ketika suatu fungsi menghasilkan error, Function Compute menetapkan header X-Fc-Error-Type dalam respons HTTP—misalnya, X-Fc-Error-Type: UnhandledInvocationError. Untuk daftar lengkap jenis error dan perilaku pengulangan (retry) pada invokasi yang gagal, lihat Penanganan error.

Lingkungan runtime Go mendukung tiga cara untuk mengembalikan error dari fungsi handler, masing-masing menghasilkan muatan respons yang berbeda:

MekanismeerrorMessageerrorTypestackTrace
Mengembalikan nilai errorString errorerrorStringTidak disertakan
panicArgumen panicstringDisertakan
log.Fatal / os.Exit(1)Pesan keluar proses generikTidak disertakanTidak disertakan

Mengembalikan nilai error

Kembalikan nilai error dari fungsi handler untuk melaporkan error yang telah ditangani. Ini merupakan pola penanganan error standar di Go dan memberi Anda kontrol penuh atas pesan error.

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

Respons invokasi adalah:

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

Panic

Panggil panic untuk memicu error yang tidak ditangani. Respons mencakup jejak stack yang menunjukkan jalur pemanggilan pada titik kegagalan.

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

Respons invokasi mencakup jejak stack (beberapa frame dihilangkan):

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

Hindari log.Fatal dan os.Exit

Perhatian: Jangan gunakan log.Fatal atau kode apa pun yang memanggil os.Exit(1). Tidak ada pesan error atau informasi stack yang dikembalikan saat keluar.
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)
}

Respons invokasi hanya berisi pesan keluar generik:

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