获取动态的Golang接口名称

huangapple go评论91阅读模式
英文:

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.

huangapple
  • 本文由 发表于 2015年12月15日 17:39:33
  • 转载请务必保留本文链接:https://go.coder-hub.com/34285661.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定