动态获取 Golang 接口名称

4

I have a interface:

type Printer interface {
    Print(s string)
}

并且有一个函数:

func fxyz(name string) {
    ....
}

我希望能够通过反射或其他方法获取接口名称,以便使用“Printer”调用fxyz,但我不想硬编码该字符串。


5
你能否请说明您确切想要什么? - icza
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - SirDarius
我认为icza更关心的是“为什么” - 也就是说,人们经常问如何解决特定问题,而不是是否采用了正确的方法。在Go语言中像这样动态调用接口很可能是错误的方法。 - elithrar
1个回答

7

如果您想获取接口的名称,可以使用reflect实现:

name := reflect.TypeOf((*Printer)(nil)).Elem().Name()
fxyz(name)

游乐场: http://play.golang.org/p/Lv6-qqqQsH.

注意,您不能仅使用reflect.TypeOf(Printer(nil)).Name(),因为TypeOf将返回nil


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接