【问题标题】:get golang interface name dynamically动态获取golang接口名称
【发布时间】:2016-03-21 00:47:59
【问题描述】:

我有一个界面:

type Printer interface {
    Print(s string)
}

还有一个函数:

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

我想用“打印机”调用 fxyz,但我不想对字符串进行硬编码。

如何使用反射或其他方法获取接口名称?

【问题讨论】:

  • 你能说明一下你到底想要什么吗?
  • 如果我理解得很好,OP 想要一个 Print 的实现来调用 fxyz,将接口的名称作为名称参数传递......好吧,即使这样似乎也不太清楚......使用反射因为这对于简单地使用“Printer”字符串常量来说是一个不可接受的折衷,因为 Print 始终是 Printer 接口的实现......
  • 我认为 icza 更多地问的是“为什么”——也就是说,人们经常问如何解决特定问题,而不是问这是否是正确的方法。像这样在 Go 中动态调用接口很可能是错误的方法。

标签: reflection go interface


【解决方案1】:

如果你想得到接口的名字,你可以使用reflect

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

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

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

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多