<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 使用第三方errors包 位于[github.com/pkg/errors](github.com/pkg/errors) 的errors包是Go標準庫的替代品。它提供了一些非常有用的操作用于封裝和處理錯誤。在之前的章節我們已經看到了如何對錯誤進行封裝,值得注意的是,使用標準庫的方式對錯誤進行封裝,會改變其類型并使類型斷言失敗。 本節我們會演示對[github.com/pkg/errors](github.com/pkg/errors) 的使用。 ### 實踐 1. 獲取第三方庫: ``` go get github.com/pkg/errors/ ``` 2. 建立errwrap.go : ``` package errwrap import ( "fmt" "github.com/pkg/errors" ) // WrappedError 演示了如何對錯誤進行封裝 func WrappedError(e error) error { return errors.Wrap(e, "An error occurred in WrappedError") } type ErrorTyped struct { error } func Wrap() { e := errors.New("standard error") fmt.Println("Regular Error - ", WrappedError(e)) fmt.Println("Typed Error - ", WrappedError(ErrorTyped{errors.New("typed error")})) fmt.Println("Nil -", WrappedError(nil)) } ``` 2. 建立unwrap.go : ``` package errwrap import ( "fmt" "github.com/pkg/errors" ) // Unwrap 解除封裝并進行斷言處理 func Unwrap() { err := error(ErrorTyped{errors.New("an error occurred")}) err = errors.Wrap(err, "wrapped") fmt.Println("wrapped error: ", err) // 處理錯誤類型 switch errors.Cause(err).(type) { case ErrorTyped: fmt.Println("a typed error occurred: ", err) default: fmt.Println("an unknown error occurred") } } // StackTrace 打印錯誤棧 func StackTrace() { err := error(ErrorTyped{errors.New("an error occurred")}) err = errors.Wrap(err, "wrapped") fmt.Printf("%+v\n", err) } ``` 2. 建立main.go : ``` package main import ( "fmt" "github.com/agtorre/go-cookbook/chapter4/errwrap" ) func main() { errwrap.Wrap() fmt.Println() errwrap.Unwrap() fmt.Println() errwrap.StackTrace() } ``` 2. 這會輸出 : ``` Regular Error - An error occurred in WrappedError: standard error Typed Error - An error occurred in WrappedError: typed error Nil - <nil> wrapped error: wrapped: an error occurred a typed error occurred: wrapped: an error occurred an error occurred github.com/agtorre/go-cookbook/chapter4/errwrap.StackTrace /Users/lothamer/go/src/github.com/agtorre/gocookbook/chapter4/errwrap/unwrap.go:30 main.main /tmp/go/src/github.com/agtorre/gocookbook/chapter4/errwrap/example/main.go:14 ``` ### 說明 封裝錯誤在開發中很常見,尤其對日志及問題查找作用巨大。該示例為大家提供了基本的思路。此外,該庫對錯誤為nil的情況進行了處理: ``` func RetError() error{ err := ThisReturnsAnError() return errors.Wrap(err, "This only does something if err != nil") } ``` 該庫的作者Dave Cheney提供了一系列的博客來討論Go語言的錯誤處理,可以查看[https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully](https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully)以了解更多。 * * * * 學識淺薄,錯誤在所難免。歡迎在群中就本書提出修改意見,以饗后來者,長風拜謝。 Golang中國(211938256) beego實戰(258969317) Go實踐(386056972)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看