英文:
get golang interface name dynamically
问题
我有一个接口:
type Printer interface {
Print(s string)
}
和一个函数:
func fxyz(name string) {
....
}
我想用"Printer"调用fxyz,但我不想硬编码字符串。
我该如何使用反射或其他方法获取接口名称?
英文:
I have a interface:
type Printer interface {
Print(s string)
}
and a func:
func fxyz(name string) {
....
}
I want to call fxyz with "Printer", but I don't want to hard code the string.
How could I get the Interface Name using reflection or other approach?
答案1
得分: 7
如果你想获取接口的名称,可以使用reflect
来实现:
name := reflect.TypeOf((*Printer)(nil)).Elem().Name()
fxyz(name)
Playground: http://play.golang.org/p/Lv6-qqqQsH.
注意,你不能简单地使用reflect.TypeOf(Printer(nil)).Name()
,因为TypeOf
会返回nil
。
英文:
If you want to get the name of the interface, you can do that using reflect
:
name := reflect.TypeOf((*Printer)(nil)).Elem().Name()
fxyz(name)
Playground: http://play.golang.org/p/Lv6-qqqQsH.
Note, you cannot just take reflect.TypeOf(Printer(nil)).Name()
because TypeOf
will return nil
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论