我试图使用Go的反射系统来检索函数的名称,但在对其类型调用name方法时,我得到了一个空字符串.这是预期的行为吗?
这是一个简单的例子,说明了我是如何处理这个问题的:
package main
import "fmt"
import "reflect"
func main() {
typ := reflect.TypeOf(main)
name := typ.Name()
fmt.Println("Name of function" + name)
}
我试图使用Go的反射系统来检索函数的名称,但在对其类型调用name方法时,我得到了一个空字符串.这是预期的行为吗?
这是一个简单的例子,说明了我是如何处理这个问题的:
package main
import "fmt"
import "reflect"
func main() {
typ := reflect.TypeOf(main)
name := typ.Name()
fmt.Println("Name of function" + name)
}
解决方案是使用FuncForPc,它返回*Func
.
这将返回"main.main"
:
package main
import "fmt"
import "reflect"
import "runtime"
func main() {
name := runtime.FuncForPC(reflect.ValueOf(main).Pointer()).Name()
fmt.Println("Name of function : " + name)
}
如果你想要"main"
,就标记它.