使用反射检索函数名称
在 Go 中,反射提供了在运行时检查和操作程序结构的机制。访问函数的名称就是这样的用例之一。但是,尝试直接从其类型获取名称可能会导致空字符串。
预期行为
使用reflect.TypeOf(function)检索函数的名称。 Name() 返回一个空字符串,因为它指向类型本身,该类型不包含函数的name.
解决方案
要检索函数的名称,我们需要利用runtime.FuncForPC。该函数获取指向函数反射值的指针并返回指向 *Func 结构的指针。在此 *Func 上调用 Name 方法会产生预期的函数名称:
name := runtime.FuncForPC(reflect.ValueOf(function).Pointer()).Name()
此方法返回包和函数名称,例如“包.功能”。如果需要,可以通过标记字符串来提取包名称。
以上是如何在 Go 中使用反射检索函数名称?的详细内容。更多信息请关注PHP中文网其他相关文章!