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
}
沒有留言:
張貼留言