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

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

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

Golang的errors包返回堆棧信息

標準庫errors提供了處理錯誤的方法。比如常用的
func New(text string) error

用該方法處理錯誤信息,就只會輸出自定義的 text 到控制臺或者日志文件,

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

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

package main

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

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

func err2() error {
	return errors.New("報錯啦,拋出異常!!")
}

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

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)
	}
}

運行結(jié)果:

報錯啦,拋出異常?。?/p>

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

這里就可以用第三方的開源庫: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("報錯啦,拋出異常??!")
}

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

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)
	}
}

運行結(jié)果:

*errors.Error 報錯啦,拋出異常?。? 
D:/gotest/src/test/main.go:14 (0x49756b)  
        main: return errors.New("報錯啦,拋出異常?。?quot;)
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()存在問題。這個庫會記錄調(diào)用棧,通過ErrorStack方法返回調(diào)用棧信息

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

相關(guān)文章

  • Go操作redis與redigo的示例解析

    Go操作redis與redigo的示例解析

    這篇文章主要為大家介紹了Go操作redis與redigo的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • 聊聊go xorm生成mysql的結(jié)構(gòu)體問題

    聊聊go xorm生成mysql的結(jié)構(gòu)體問題

    這篇文章主要介紹了go xorm生成mysql的結(jié)構(gòu)體問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-03-03
  • Go語言使用Cobra實現(xiàn)強大命令行應用

    Go語言使用Cobra實現(xiàn)強大命令行應用

    Cobra是一個強大的開源工具,能夠幫助我們快速構(gòu)建出優(yōu)雅且功能豐富的命令行應用,本文為大家介紹了如何使用Cobra打造強大命令行應用,感興趣的小伙伴可以了解一下
    2023-07-07
  • go實現(xiàn)腳本解釋器gscript

    go實現(xiàn)腳本解釋器gscript

    這篇文章主要為大家介紹了go實現(xiàn)腳本解釋器gscript示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 解決golang gin框架跨域及注解的問題

    解決golang gin框架跨域及注解的問題

    這篇文章主要介紹了解決golang gin框架跨域及注解的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • go語言base64加密解密的方法

    go語言base64加密解密的方法

    這篇文章主要介紹了go語言base64加密解密的方法,實例分析了Go語言base64加密解密的技巧,需要的朋友可以參考下
    2015-03-03
  • Go語言sync.Map詳解及使用場景

    Go語言sync.Map詳解及使用場景

    Go語言中的sync.Map是一個高效的并發(fā)安全映射結(jié)構(gòu),適用于高并發(fā)讀多寫少的場景,它通過讀寫分離、無鎖讀取路徑、寫入時的鎖保護等機制,提高了讀取性能并減少了鎖競爭,sync.Map不需要手動管理鎖,降低了編程復雜性,適合需要簡單并發(fā)訪問的場合
    2024-10-10
  • golang優(yōu)化目錄遍歷的實現(xiàn)方法

    golang優(yōu)化目錄遍歷的實現(xiàn)方法

    對于go1.16的新變化,大家印象最深的可能是io包的大規(guī)模重構(gòu),但這個重構(gòu)實際上還引進了一個優(yōu)化,這篇文章要說的就是這個優(yōu)化,所以本將給大家介紹golang是如何優(yōu)化目錄遍歷的,需要的朋友可以參考下
    2024-08-08
  • Golang內(nèi)存泄漏場景以及解決方案詳析

    Golang內(nèi)存泄漏場景以及解決方案詳析

    golang中內(nèi)存泄露的發(fā)現(xiàn)與排查一直是來是go開發(fā)者頭疼的一件事,下面這篇文章主要給大家介紹了關(guān)于Golang內(nèi)存泄漏場景以及解決的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • Go語言中基本數(shù)據(jù)類型的相互轉(zhuǎn)換詳解

    Go語言中基本數(shù)據(jù)類型的相互轉(zhuǎn)換詳解

    Go在不同類型的變量之間賦值時需要顯示轉(zhuǎn)換,不能自動轉(zhuǎn)換。這篇文章主要和大家介紹了Go語言中基本數(shù)據(jù)類型的相互轉(zhuǎn)換,感興趣的小伙伴可以了解一下
    2022-10-10

最新評論