Reflection 动态获取golang接口名
我有一个界面:Reflection 动态获取golang接口名,reflection,go,interface,Reflection,Go,Interface,我有一个界面: type Printer interface { Print(s string) } 和一个func: func fxyz(name string) { .... } 我想用“Printer”调用fxyz,但我不想硬编码字符串 如何使用反射或其他方法获取接口名称 如果要获取接口的名称,可以使用reflect: name := reflect.TypeOf((*Printer)(nil)).Elem().Name() fxyz(name) 操场: 请注意,您不
type Printer interface {
Print(s string)
}
和一个func:
func fxyz(name string) {
....
}
我想用“Printer”调用fxyz,但我不想硬编码字符串
如何使用反射或其他方法获取接口名称 如果要获取接口的名称,可以使用
reflect
:
name := reflect.TypeOf((*Printer)(nil)).Elem().Name()
fxyz(name)
操场:
请注意,您不能只取
reflect.TypeOf(Printer(nil)).Name()
,因为TypeOf
将返回nil
您能澄清一下您到底想要什么吗?如果我理解得很好,OP希望实现Print调用fxyz,并将接口的名称作为名称参数传递。。。好吧,即使如此,这似乎也不太清楚。。。简单地使用“打印机”字符串常量,使用反射将是一个不可接受的折衷,因为打印始终是打印机接口的一个实现……我认为icza更多地询问了“为什么”——也就是说,人们经常问如何解决特定问题,而不是这是否是正确的方法。像这样在Go中动态调用接口很可能是错误的方法。