亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

golang常用庫之pkg/errors包第三方錯誤處理包案例詳解

 更新時間:2022年03月23日 09:31:36   作者:西京刀客  
這篇文章主要介紹了golang常用庫之pkg/errors包第三方錯誤處理包,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

golang常用庫之-pkg/errors包

背景

golang自帶了錯誤信息包error

  • 只提供了簡單的用法, 如errors.New(),和errors.Error()用來傳遞和獲取錯誤信息.
  • 明顯官方的包已經(jīng)不能滿足了, 只能采取其他方法補救, 如:采用三方errors包。

關(guān)于官方errors包

Go 語言使用 error 類型來返回函數(shù)執(zhí)行過程中遇到的錯誤,如果返回的 error 值為 nil,則表示未遇到錯誤,否則 error 會返回一個字符串,用于說明遇到了什么錯誤。

查看golang的errors包你會發(fā)現(xiàn)其源碼是:

package errors

// New returns an error that formats as the given text.
// Each call to New returns a distinct error value even if the text is identical.
func New(text string) error {
	return &errorString{text}
}
// errorString is a trivial implementation of error.
type errorString struct {
	s string
func (e *errorString) Error() string {
	return e.s

New方法通過傳入的text創(chuàng)建不同的errorString,這個結(jié)構(gòu)體實現(xiàn)了Error()方法,這樣便可以動態(tài)的創(chuàng)建不同的錯誤類型。

New返回了一個實現(xiàn)error接口的errorString類型的指針。 那為啥不是返回errorString的值類型??

我們在調(diào)用errors.New("")來返回一個錯誤時, **可以通過比較指針,來比較error是否相等, 實際上就是控制相同的錯誤我們只創(chuàng)建一個error對象。**否則對象復(fù)制一下,在比較就是false了。

而且指針才會與nil相比較, 如果是字符串"" 雖然錯誤內(nèi)容為空,但是還是有錯誤的。

在這里插入圖片描述

看過源碼我們很清楚的知道內(nèi)置的error類型包含的信息十分有限

官方errors包使用demo

package main

import (
	"errors"
	"fmt"
)
func main()  {
	err := errors.New("errors!?。。。。。。。?!")
	if err != nil {
		fmt.Print(err)
	}
}

什么是pkg/errors包

github.com/pkg/errors

Golang 的 error 不會像 Java 那樣打印 stackTrack 信息?;厮?err 很是不方便。

pkg/errors 是一個用的比較多,同時也比較靈活的一個golang 異常處理包,我們基于此包,可以靈活的處理軟件開發(fā)中的異常

位于github.com/pkg/errors 的errors包是Go標(biāo)準(zhǔn)庫的替代品。它提供了一些非常有用的操作用于封裝和處理錯誤。

經(jīng)過 github.com/pkg/errors 這個包來處理 err,WithStack(err) 函數(shù)能夠打印 stack

pkg/errors包使用demo

%s,%v //功能一樣,輸出錯誤信息,不包含堆棧
%q //輸出的錯誤信息帶引號,不包含堆棧
%+v //輸出錯誤信息和堆棧
如:
fmt.Println(fmt.Sprintf("%s", err))
fmt.Println(fmt.Sprintf("%q", err))
fmt.Println(fmt.Sprintf("%+v", err))

注意,使用 log.Errorf("%+v", err) 才會打印 stackTrack,使用 %v %s 不行。

package main

import (
	E "errors"
	"fmt"
	"github.com/pkg/errors"
)
func main() {
	err0 := t1()
	err := errors.Wrap(err0, "附加信息")
	if err != nil {
		//打印錯誤需要%+v才能詳細輸出
		fmt.Printf("err :%+v\n", err)
	}
	fmt.Println("Hello world")
}
func t1() error {
	return E.New("錯誤")

結(jié)果:

在這里插入圖片描述

優(yōu)秀開源項目使用案例

https://github.com/marmotedu/errors

作者基于 github.com/pkg/errors 包,增加對 error code 的支持,完全兼容 github.com/pkg/errors。

性能跟 github.com/pkg/errors 基本持平。

該 errors 包匹配的錯誤碼設(shè)計請參考:marmotedu/sample-code

可以用于web服務(wù) code message json返回效果。
如果返回結(jié)果中存在 code 字段,則表示調(diào)用 API 接口失敗。例如:

{
  "code": 100101,
  "message": "Database error"
}

上述返回中 code 表示錯誤碼,message 表示該錯誤的具體信息。每個錯誤同時也對應(yīng)一個 HTTP 狀態(tài)碼,比如上述錯誤碼對應(yīng)了 HTTP 狀態(tài)碼 500(Internal Server Error)。

參考

Golang的錯誤處理
參考URL: https://zhuanlan.zhihu.com/p/89821850

到此這篇關(guān)于golang常用庫之-pkg/errors包 第三方錯誤處理包的文章就介紹到這了,更多相關(guān)golang pkg/errors包第三方錯誤處理包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于golang利用channel和goroutine完成統(tǒng)計素數(shù)的思路

    關(guān)于golang利用channel和goroutine完成統(tǒng)計素數(shù)的思路

    這篇文章主要介紹了golang利用channel和goroutine完成統(tǒng)計素數(shù)的思路詳解,通過思路圖分析及實例代碼相結(jié)合給大家介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • golang使用接口進行靈活緩存

    golang使用接口進行靈活緩存

    緩存是編程中一種常見的技術(shù),通過存儲昂貴的計算或?IO?結(jié)果來快速查找,從而提高性能,本文將介紹一下Go的接口如何幫助構(gòu)建靈活、可擴展的緩存,感興趣的可以了解下
    2023-09-09
  • go語言開發(fā)中如何優(yōu)雅得關(guān)閉協(xié)程方法

    go語言開發(fā)中如何優(yōu)雅得關(guān)閉協(xié)程方法

    這篇文章主要為大家介紹了go語言開發(fā)中如何優(yōu)雅得關(guān)閉協(xié)程方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Go語言實現(xiàn)字符串搜索算法Boyer-Moore

    Go語言實現(xiàn)字符串搜索算法Boyer-Moore

    Boyer-Moore?算法是一種非常高效的字符串搜索算法,被廣泛的應(yīng)用于多種字符串搜索場景,下面我們就來學(xué)習(xí)一下如何利用Go語言實現(xiàn)這一字符串搜索算法吧
    2023-11-11
  • Go語言如何高效的進行字符串拼接(6種方式對比分析)

    Go語言如何高效的進行字符串拼接(6種方式對比分析)

    本文主要介紹了Go語言如何高效的進行字符串拼接(6種方式對比分析),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 一文帶你深入了解Golang中的Mutex

    一文帶你深入了解Golang中的Mutex

    這篇文章主要為大家詳細介紹了Golang中Mutex的相關(guān)知識,知其然,更要知其所以然。文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-03-03
  • Golang?基礎(chǔ)面試題集錦

    Golang?基礎(chǔ)面試題集錦

    這篇文章主要為大家介紹了Golang?基礎(chǔ)面試題集錦,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Go reflect 反射原理示例詳解

    Go reflect 反射原理示例詳解

    這篇文章主要為大家介紹了Go reflect 反射原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Go?模塊在下游服務(wù)抖動恢復(fù)后CPU占用無法恢復(fù)原因

    Go?模塊在下游服務(wù)抖動恢復(fù)后CPU占用無法恢復(fù)原因

    這篇文章主要為大家介紹了Go?模塊在下游服務(wù)抖動恢復(fù)后CPU占用無法恢復(fù)原因詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Go實現(xiàn)文件上傳和下載

    Go實現(xiàn)文件上傳和下載

    這篇文章主要為大家詳細介紹了Go實現(xiàn)文件上傳和下載,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評論