第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang pkg/errors 如何打印自定義包裝的錯誤?

golang pkg/errors 如何打印自定義包裝的錯誤?

Go
慕的地8271018 2022-10-31 15:44:49
我的項目包含一個自定義錯誤類型errNotFound,其中嵌入了一個錯誤?,F(xiàn)在我有一個pkg/errors包,它會生成一個打印調(diào)用堆棧的錯誤。但是當(dāng)我將此錯誤內(nèi)聯(lián)到 errNotFound 中時,不會打印調(diào)用堆棧。這是一個示例,我該如何更改它?簡單的:package mainimport (    "fmt"    stderrors "errors"    "github.com/pkg/errors")func findSomething() error {    return errors.Errorf("something not found")}func main() {    err := findSomething()    // can print error stack    exitf("Error1: %+v", err)    fmt.Println()    fmt.Println()    // cannot print error stack    err = ErrNotFound(err)    exitf("Error2: %+v", err)}func exitf(format string, args ...interface{}) {    fmt.Printf(format, args...)    //os.Exit(1)}type errNotFound struct{ error }func ErrNotFound(err error) error {    if err == nil || IsErrNotFound(err) {        return err    }    return errNotFound{err}}func IsErrNotFound(err error) bool {    return stderrors.As(err, &errNotFound{})}輸出:$ go run mainError1: something not foundmain.findSomething        /home/lianxm/github.com/play_error/main.go:11main.main        /home/lianxm/github.com/play_error/main.go:15runtime.main        /usr/local/go/src/runtime/proc.go:255runtime.goexit        /usr/local/go/src/runtime/asm_amd64.s:1581Error2: something not found我知道我可以得到原始錯誤err = errors.Unwrap(err)然后打印它,但這意味著我每次打印前都需要這樣做,這不是很優(yōu)雅的代碼,我真的不想這樣做......這是一個示例項目:https ://github.com/lianxmfor/play_error
查看完整描述

3 回答

?
狐的傳說

TA貢獻1804條經(jīng)驗 獲得超3個贊

如果您已經(jīng)擁有堆棧,是否有必要將錯誤放入另一個錯誤?


如果是...您可以為 errNotFound 定義一個方法,例如:


func (e errNotFound) Error() string {

    return fmt.Printf("NotFound: %+v", e.err)

}


查看完整回答
反對 回復(fù) 2022-10-31
?
回首憶惘然

TA貢獻1847條經(jīng)驗 獲得超11個贊

調(diào)用時exitf您可以使用errors.WithStack打印堆棧跟蹤。



查看完整回答
反對 回復(fù) 2022-10-31
?
江戶川亂折騰

TA貢獻1851條經(jīng)驗 獲得超5個贊

您需要使用堆棧注釋錯誤:


func ErrNotFound(err error) error {

        if err == nil || IsErrNotFound(err) {

                return err

        }


        return errors.WithStack(errNotFound{err})

}


查看完整回答
反對 回復(fù) 2022-10-31
  • 3 回答
  • 0 關(guān)注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號