一尘不染

使用反射获取函数名称

go

我正在尝试使用Go的反射系统来检索函数的名称,但是在调用其类型的Name方法时会得到一个空字符串。这是预期的行为吗?

这是我如何解决问题的简单示例:

package main

import "fmt"
import "reflect"

func main() {
    typ := reflect.TypeOf(main)
    name := typ.Name()
    fmt.Println("Name of function" + name)
}

阅读 246

收藏
2020-07-02

共1个答案

一尘不染

解决方案是使用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",只需将其标记化即可。

2020-07-02