go - 是否可以获得返回值的源代码行?
问题描述
在使用 gin/echo/mux 或其他方式构建 Web 应用程序时,我有一些处理程序或函数,有很多返回错误的可能性。由于当前应用程序的复杂性,我的想法是创建一些后中间件或处理程序,并获取来自哪个源代码的返回值并记录它们,这可能吗?
func main (){
// is it possible to get which line returned value, i.e line 11 of main.go?
e := Validate(10)
if e != nil {
fmt.Println("Error: %v", e)
]
}
func Validate(i int) error {
if i >= 10 {
return fmt.Errorf("want less ten, got %v", i) // i.e line 11
} else if i < 0 {
return fmt.Errorf("negative number: %v", i)
}
return nil
}
解决方案
你的方法是倒退的。不要试图从调用者那里弄清楚这一点——而是让函数本身在错误中包含堆栈跟踪。github.com/pkg/errors
可以在这里提供帮助。
举个例子:
import "github.com/pkg/errors"
func main (){
e := Validate(10)
if e != nil {
fmt.Println("Error: %v", e)
]
}
func Validate(i int) error {
if i >= 10 {
return errors.Errorf("want less ten, got %v", i) // i.e line 11
}
if i < 0 {
return errors.Errorf("negative number: %v", i)
}
return nil
}
推荐阅读
- c++ - c++ 中的指针“this”是否支持虚拟机制?
- python - Numpy 数组制作 1 和 0 的“Z”?
- python - 为什么 Pycharm IDE 在运行小游戏时会这么慢?
- javascript - Uncaught (in promise) TypeError: selfHook.call is not a function
- mysql - 为什么 UPDATE answertable SET Ans-Farsi-value = `خیلی ناراضی` WHERE Ans-value =`Very Dissatisfied' 生成 1064 错误;
- c# - 有没有办法将不同类型的数组传递给接口实现
- java - 带有JDK11客户端的https代理
- python - 为什么 pandas apply() 函数的行为在 pandas 1.1 中发生了变化?
- c# - 试图从数据库绑定下拉列表得到错误
- java - 如何从 Java 执行安装在 Python 虚拟环境中的 Python 工具