使用反射检索函数名称
在 Go 中,反射提供了在运行时检查和操作程序结构的机制。访问函数的名称就是这样的用例之一。但是,尝试直接从其类型获取名称可能会导致空字符串。
预期行为
使用reflect.TypeOf(function)检索函数的名称。 Name() 返回一个空字符串,因为它指向类型本身,该类型不包含函数的name.
解决方案
要检索函数的名称,我们需要使用runtime.FuncForPC。该函数获取指向函数反射值的指针并返回指向 *Func 结构的指针。在此 *Func 上调用 Name 方法会产生预期的函数名称:
name := runtime.FuncForPC(reflect.ValueOf(function).Pointer()).Name()
This方法返回包和函数名称,例如“包.功能”。如果需要,可以通过标记字符串来提取包名称。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3