欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang常用庫(kù)之pkg/errors包第三方錯(cuò)誤處理包案例詳解

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

golang常用庫(kù)之-pkg/errors包

背景

golang自帶了錯(cuò)誤信息包error

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

關(guān)于官方errors包

Go 語(yǔ)言使用 error 類型來(lái)返回函數(shù)執(zhí)行過(guò)程中遇到的錯(cuò)誤,如果返回的 error 值為 nil,則表示未遇到錯(cuò)誤,否則 error 會(huì)返回一個(gè)字符串,用于說(shuō)明遇到了什么錯(cuò)誤。

查看golang的errors包你會(huì)發(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方法通過(guò)傳入的text創(chuàng)建不同的errorString,這個(gè)結(jié)構(gòu)體實(shí)現(xiàn)了Error()方法,這樣便可以動(dòng)態(tài)的創(chuàng)建不同的錯(cuò)誤類型。

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

我們?cè)谡{(diào)用errors.New("")來(lái)返回一個(gè)錯(cuò)誤時(shí), **可以通過(guò)比較指針,來(lái)比較error是否相等, 實(shí)際上就是控制相同的錯(cuò)誤我們只創(chuàng)建一個(gè)error對(duì)象。**否則對(duì)象復(fù)制一下,在比較就是false了。

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

在這里插入圖片描述

看過(guò)源碼我們很清楚的知道內(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 不會(huì)像 Java 那樣打印 stackTrack 信息?;厮?err 很是不方便。

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

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

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

pkg/errors包使用demo

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

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

package main

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

結(jié)果:

在這里插入圖片描述

優(yōu)秀開(kāi)源項(xiàng)目使用案例

https://github.com/marmotedu/errors

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

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

該 errors 包匹配的錯(cuò)誤碼設(shè)計(jì)請(qǐng)參考:marmotedu/sample-code

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

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

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

參考

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

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

相關(guān)文章

  • 關(guān)于golang利用channel和goroutine完成統(tǒng)計(jì)素?cái)?shù)的思路

    關(guān)于golang利用channel和goroutine完成統(tǒng)計(jì)素?cái)?shù)的思路

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

    golang使用接口進(jìn)行靈活緩存

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

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

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

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

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

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

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

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

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

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

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

    Go reflect 反射原理示例詳解

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

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

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

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

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

最新評(píng)論