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