如何在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)
答案 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。
但是,您需要有权访问该文件并能够解析该文件(或该行)以获取“调用方参数字符串”。