首页 > 解决方案 > 是否可以获得返回值的源代码行?

问题描述

在使用 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
}

标签: go

解决方案


你的方法是倒退的。不要试图从调用者那里弄清楚这一点——而是让函数本身在错误中包含堆栈跟踪。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
}

推荐阅读