自己做网站做那种类型,全屏网站设计,什么是网站搭建,免费建一个自己的网站Golang的errors包返回堆栈信息
标准库errors提供了处理错误的方法。比如常用的 func New(text string) error
用该方法处理错误信息#xff0c;就只会输出自定义的 text 到控制台或者日志文件#xff0c;没有其它辅助排查的信息输出#xff0c;所以常规我们就只能根据 te…Golang的errors包返回堆栈信息
标准库errors提供了处理错误的方法。比如常用的 func New(text string) error
用该方法处理错误信息就只会输出自定义的 text 到控制台或者日志文件没有其它辅助排查的信息输出所以常规我们就只能根据 text 去全局搜哪里抛出了这个错误再来定位代码层面上下文问题。
当然不是不行但是嵌套代码多抛出 text 存在多处一致的情况就比较麻烦了。比如以下例子
package mainimport (errorsfmtos
)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)}
}运行结果
报错啦抛出异常代码中有三处同样的错误输出根据这个错误信息无法判断是来源于哪个方法只能通过调试或者在每个 err!nil 内再加输出进行定位。
这里就可以用第三方的开源库github.com/go-errors/errors
下面用 github.com/go-errors/errors改造下
package mainimport (fmtgithub.com/go-errors/errorsos
)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)}
}运行结果
*errors.Error 报错啦抛出异常
D:/gotest/src/test/main.go:14 (0x49756b) main: return errors.New(报错啦抛出异常)
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有了调用堆栈信息就很明确知道 err2()存在问题。这个库会记录调用栈通过ErrorStack方法返回调用栈信息
参考资料
errors返回堆栈信息 https://blog.csdn.net/EDDYCJY/article/details/134890000