網頁

2023/9/4

Golang 錯誤包裹 error Wrap Unwrap

Go 1.13開始支援error的包裹(Wrap)和拆包(Unwrap),簡單用法如下。


使用fmt.Errorf搭配格式字串的%w動詞即可包裹原本的error並產生新的error。而調用errors.Unrap可將包裹的error拆包返回被包裹的error。

使用errors.Is(err, target error)可以比較兩個error是否相同,如果第一個err參數為後面target參數的包裹error,則返回true;但反之不亦然。

package main

import (
    "errors"
    "fmt"
)

func main() {
    err := errors.New("缺便宜勞工")
    fmt.Println(err) // 缺便宜勞工

    err1 := fmt.Errorf("缺工 - %w", err)
    fmt.Println(err1) // 缺工 - 缺便宜勞工

    err = errors.Unwrap(err1)
    fmt.Println(err) // 缺便宜勞工

    fmt.Println(errors.Is(err1, err)) // true
    fmt.Println(errors.Is(err, err1)) // false
}

沒有留言:

張貼留言