如何在golang中获取调用者参数字符串?不可能吗

时间:2018-07-16 02:18:00

标签: go reflection runtime

如何在reflectCallArgs中返回user.Class.Name字符串。不可能吗?

type User struct {
    Class struct {
        Name string
    }
}
var user = &User{}
reflectCallArgs := func(src interface{}) string {
    //how to get this string?
    return "user.Class.Name"
}
reflectCallArgs(user.Class.Name)

1 个答案:

答案 0 :(得分:0)

通过查询runtime.Caller,可以得到的最接近的信息是调用函数的文件名和行号。 https://golang.org/pkg/runtime/#Caller

func Caller(skip int) (pc uintptr, file string, line int, ok bool)
  

调用方报告有关调用goroutine堆栈上的函数调用的文件和行号信息。参数skip是要提升的堆栈帧数,其中0标识Caller的调用者。 (由于历史原因,在调用方和调用方之间,跳过的含义有所不同。)返回值报告相应调用文件中的程序计数器,文件名和行号。如果无法恢复信息,则ok布尔值为False。

但是,您需要有权访问该文件并能够解析该文件(或该行)以获取“调用方参数字符串”。