網頁

2021/9/5

Golang fmt.Errorf() 與 github.com/pkg/errors.Errorf() 區別

Go語言fmt.Errorf()github.com/pkg/errors.Errorf()區別如下。


fmt.Errorf()為Go的標准函式庫,可產生帶格式化錯誤訊息的error

errors.Errorf()為第三方函式庫,可產生帶格式化錯誤訊息及stack trace紀錄的error


例如下面使用%+v符號可印出errors.Errorf()的stack trace訊息。

main.go

package main

import (
    "fmt"

    "github.com/pkg/errors"
)

func main() {
    err := errors.Errorf("Size cannot larger then %d", 10)
    print(err)

    err = fmt.Errorf("Size cannot larger then %d", 100)
    print(err)
}

func print(err error) {
    fmt.Printf("%+v\n", err)
}

執行印出結果如下。第1行到第7行為errors.Errorf()的錯誤訊息及stack trace;
最後一行為fmt.Errorf()的錯誤訊息。

Size cannot larger then 10
main.main
        /.../go-demo/main.go:10
runtime.main
        /usr/local/Cellar/go/1.16.6/libexec/src/runtime/proc.go:225
runtime.goexit
        /usr/local/Cellar/go/1.16.6/libexec/src/runtime/asm_amd64.s:1371
Size cannot larger then 100



沒有留言:

張貼留言