最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang中使用errors返回調(diào)用堆棧信息

 更新時(shí)間:2023年12月15日 09:22:17   作者:毛小子  
這篇文章給大家介紹了Golang中如何使用errors返回調(diào)用堆棧信息,文章通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下

Golang的errors包返回堆棧信息

標(biāo)準(zhǔn)庫(kù)errors提供了處理錯(cuò)誤的方法。比如常用的
func New(text string) error

用該方法處理錯(cuò)誤信息,就只會(huì)輸出自定義的 text 到控制臺(tái)或者日志文件,

沒有其它輔助排查的信息輸出,所以常規(guī)我們就只能根據(jù) text 去全局搜哪里拋出了這個(gè)錯(cuò)誤,再來(lái)定位代碼層面上下文問題。

當(dāng)然,不是不行,但是嵌套代碼多,拋出 text 存在多處一致的情況,就比較麻煩了。比如以下例子:

package main

import (
	"errors"
	"fmt"
	"os"
)

func err1() error {
	return errors.New("報(bào)錯(cuò)啦,拋出異常??!")
}

func err2() error {
	return errors.New("報(bào)錯(cuò)啦,拋出異常??!")
}

func err3() error {
	return errors.New("報(bào)錯(cuò)啦,拋出異常?。?)
}

func main() {
	err := err1()
	if err != nil {
		fmt.Println(err)
		os.Exit(0)
	}
	err = err2()
	if err != nil {
		fmt.Println(err)
		os.Exit(0)
	}
	err = err3()
	if err != nil {
		fmt.Println(err)
		os.Exit(0)
	}
}

運(yùn)行結(jié)果:

報(bào)錯(cuò)啦,拋出異常??!

代碼中有三處同樣的錯(cuò)誤輸出,根據(jù)這個(gè)錯(cuò)誤信息,無(wú)法判斷是來(lái)源于哪個(gè)方法,只能通過(guò)調(diào)試或者在每個(gè) err!=nil 內(nèi)再加輸出進(jìn)行定位。

這里就可以用第三方的開源庫(kù):github.com/go-errors/errors

下面用 github.com/go-errors/errors改造下

package main

import (
	"fmt"
	"github.com/go-errors/errors"
	"os"
)

func err1() error {
	return nil
}

func err2() error {
	return errors.New("報(bào)錯(cuò)啦,拋出異常?。?)
}

func err3() error {
	return errors.New("報(bào)錯(cuò)啦,拋出異常??!")
}

func main() {
	err := err1()
	if err != nil {
		fmt.Println(err.(*errors.Error).ErrorStack())
		os.Exit(0)
	}
	err = err2()
	if err != nil {
		fmt.Println(err.(*errors.Error).ErrorStack())
		os.Exit(0)
	}
	err = err3()
	if err != nil {
		fmt.Println(err.(*errors.Error).ErrorStack())
		os.Exit(0)
	}
}

運(yùn)行結(jié)果:

*errors.Error 報(bào)錯(cuò)啦,拋出異常?。? 
D:/gotest/src/test/main.go:14 (0x49756b)  
        main: return errors.New("報(bào)錯(cuò)啦,拋出異常??!")
D:/gotest/src/test/main.go:27 (0x497559)
        main: err = err2()
D:/golang/src/runtime/proc.go:250 (0x4379fe)
        main: fn()
D:/golang/src/runtime/asm_amd64.s:1594 (0x45ee41)
        goexit: BYTE $0x90 // NOP

有了調(diào)用堆棧信息,就很明確知道 err2()存在問題。這個(gè)庫(kù)會(huì)記錄調(diào)用棧,通過(guò)ErrorStack方法返回調(diào)用棧信息

以上就是Golang中使用errors返回調(diào)用堆棧信息的詳細(xì)內(nèi)容,更多關(guān)于Golang errors返回堆棧信息的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 讓goland支持proto文件類型的實(shí)現(xiàn)

    讓goland支持proto文件類型的實(shí)現(xiàn)

    這篇文章主要介紹了讓goland支持proto文件類型的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go語(yǔ)言sync鎖與對(duì)象池的實(shí)現(xiàn)

    Go語(yǔ)言sync鎖與對(duì)象池的實(shí)現(xiàn)

    本文介紹了Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)sync包提供的并發(fā)控制工具,主要包括互斥鎖(sync.Mutex)和讀寫鎖(sync.RWMutex)兩類同步機(jī)制,下面就來(lái)具體介紹一下這兩個(gè)的使用,感興趣的可以了解一下
    2025-08-08
  • 如何用go操作iptables和ipset設(shè)置黑白名單

    如何用go操作iptables和ipset設(shè)置黑白名單

    這篇文章主要介紹了如何用go操作iptables和ipset設(shè)置黑白名單問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • GoLang切片并發(fā)安全解決方案詳解

    GoLang切片并發(fā)安全解決方案詳解

    這篇文章主要介紹了GoLang切片并發(fā)安全問題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • Golang CSP并發(fā)機(jī)制及使用模型

    Golang CSP并發(fā)機(jī)制及使用模型

    這篇文章主要為大家介紹了Golang CSP并發(fā)機(jī)制及使用模型,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • GO中?分組聲明與array,?slice,?map函數(shù)

    GO中?分組聲明與array,?slice,?map函數(shù)

    這篇文章主要介紹了GO中?分組聲明與array,slice,map函數(shù),Go語(yǔ)言中,同時(shí)聲明多個(gè)常量、變量,或者導(dǎo)入多個(gè)包時(shí),可采用分組的方式進(jìn)行聲明,下面詳細(xì)介紹需要的小伙伴可以參考一下
    2022-03-03
  • Golang::slice和nil的對(duì)比分析

    Golang::slice和nil的對(duì)比分析

    這篇文章主要介紹了Golang::slice和nil的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go通過(guò)SJSON實(shí)現(xiàn)動(dòng)態(tài)修改JSON

    Go通過(guò)SJSON實(shí)現(xiàn)動(dòng)態(tài)修改JSON

    在Go語(yǔ)言 json 處理領(lǐng)域,在 json 數(shù)據(jù)處理中,讀取與修改是兩個(gè)核心需求,本文我們就來(lái)看看如何使用SJSON進(jìn)行動(dòng)態(tài)修改JSON吧,有需要的小伙伴可以了解下
    2025-03-03
  • go micro集成鏈路跟蹤的方法和中間件原理解析

    go micro集成鏈路跟蹤的方法和中間件原理解析

    這篇文章主要介紹了go-micro集成鏈路跟蹤的方法和中間件原理,關(guān)于Http或者說(shuō)是Restful服務(wù)的鏈路跟蹤,go-micro的httpClient支持CallWrapper,可以用WrapCall來(lái)添加鏈路跟蹤的CallWrapper,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-05-05
  • Golang 如何限制木馬圖片上傳服務(wù)器的實(shí)例

    Golang 如何限制木馬圖片上傳服務(wù)器的實(shí)例

    本文主要介紹了Golang 如何限制木馬圖片上傳服務(wù)器的實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評(píng)論

安塞县| 阳信县| 通辽市| 永嘉县| 额尔古纳市| 桓台县| 丹江口市| 扎鲁特旗| 南丰县| 乐平市| 抚顺县| 枣强县| 湘西| 工布江达县| 昭苏县| 开鲁县| 苗栗市| 北碚区| 东台市| 乐平市| 江城| 金乡县| 古蔺县| 济阳县| 手机| 溧阳市| 红原县| 滁州市| 舟曲县| 阿尔山市| 镇沅| 公主岭市| 沙坪坝区| 井陉县| 临汾市| 宜春市| 新津县| 眉山市| 龙州县| 阳江市| 石嘴山市|