当前位置: 首页 > 面试题库 >

如何列出接口类型中的方法名称?

干鑫鹏
2023-03-14
问题内容

例如,

type FooService interface {
    Foo1(x int) int
    Foo2(x string) string
}

我正在尝试["Foo1", "Foo2"]使用运行时反射获取列表。


问题答案:

试试这个:

t := reflect.TypeOf((*FooService)(nil)).Elem()
var s []string
for i := 0; i < t.NumMethod(); i++ {
    s = append(s, t.Method(i).Name)
}

游乐场的例子

获取接口类型的reflect.Type是棘手的部分。请参阅如何获取接口的reflect.Type?进行解释。



 类似资料:
  • 问题内容: 假设我正在设计类似以下界面的内容: 但是,需要注意的是,for的返回类型和参数匹配具体的实现,而不仅仅是。也就是说,如果我具有该实现,则需要具备以下条件: 如上所述,不会引起任何编译错误,但是不能保证在所有实现中返回类型都匹配。当然,甚至不会编译,因为签名与接口不匹配。 一种候选解决方案是在泛型中使用自引用或递归范围: 这将使我得到我想要的东西,但有一个例外:其他实现可能传递错误的泛型

  • 标题冗长,可能令人困惑,但我不知道如何使它更好...我希望能够访问数组列表中的值并将其打印出来。 我有一个叫做ThingBagInterface的接口。ThingBagInterface只有一种方法,如下所示: 我现在有一个叫做ThingBag的类,它是一个包,里面有很多不同的东西,比如生物,建筑等等。 在ThingBag类中,我初始化了所有的生物,如下所示: 然后我有一个函数populateBa

  • 问题内容: 目前我有这样的事情 main.go 还有我的工作包 和 我正在传递给NewJob的函数是在goroutine上每2秒执行一次,但是我想访问我传递的匿名结构…但是当我尝试访问时 编号 我越来越 t.Id未定义(类型interface {}是没有方法的接口) 但是打印t给我预期的结果 {1} 问题答案: 您必须先将其声明为兼容类型,然后才能访问其字段。

  • 我试图使用Reflection.Emit发出一个类,该类将在运行时从多个接口继承,我无法提前知道哪些接口。 根据 MSDN/TypeBuilder.Define方法优先: 要重写基类的方法或实现接口的方法,只需发出与要重写或实现的方法具有相同名称和签名的方法 下面是我重写接口方法的代码: 这是有效的,除非我从两个接口继承,这两个接口都有一个同名的方法。显然,这是因为我没有为该方法提供完全限定的名称

  • 有一个界面WebElement。 我想做一个包装器UIElement,它实现了WebElement。 我已经重写了所有方法。 但是返回List的findElementS方法面临一个问题 这是我的方法,IDE没有给出上面的错误: 这是UIElement类和构造函数:

  • 问题内容: 我正在使用Go编写的模板系统,这意味着它需要自由使用该软件包。在这种特定情况下,我需要能够在上动态调用方法。奇怪的是,只要我的数据是已知类型,反射逻辑就可以正常工作,但是如果数据是type则不能。 在下面的例子中可以看到,在逻辑和是相同的。唯一的区别是数据是内部的已知类型还是已知类型 播放:http://play.golang.org/p/FTP3wgc0sZ 执行此代码后,我们得到以