我试图使用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",就标记它.

Go相关问答推荐

Google OAuth2没有刷新令牌

消费者在NAT中是如何实现的

切换选项卡时,Goland IDE中的光标自动转移

golang.org/x/oauth2 oauth2.Config.Endpoint.TokenURL mock:缺少access_token

如何在GoFr中为生产和本地环境设置不同的配置?

Wamtime Memory中的‘Offset’是什么?Read?

Python样式生成器实现为通道:过早读取

无法使用exec从管道中读取.Go中的命令

如何使用 go 读取 RDF xml 文件中的 XML 命名空间属性

Go Build删除信息

「GORM错误」不支持的数据类型:&[],不正确的模式

Go 中的 YAML 自定义标签

如何使用 GolangCI 删除未使用的导入

Apache Beam 在 Go 中从 PCollection 中 Select 前 N 行

Protobuf.Any - 从 json.RawMessage 解组

具有两个或多个模型的 GORM 查询

有没有办法判断值是否满足接口中定义的类型约束?

显示作为服务帐户身份验证的谷歌日历事件 - Golang App

函数的递归调用以 goroutine 和惯用方式开始,以在所有工作 goroutine 完成时继续调用者

无法识别同步错误.使用一次