首页 >后端开发 >Golang >如何以编程方式列出 Go 接口中定义的方法名称?

如何以编程方式列出 Go 接口中定义的方法名称?

Barbara Streisand
Barbara Streisand原创
2024-11-03 08:51:29990浏览

How do you programmatically list the method names defined in a Go interface?

在接口类型中列出方法名称

在 Go 中,接口定义了类型必须实现的方法契约。在运行时与接口交互时,您可能需要访问其方法的名称。

问题:

考虑以下接口定义:

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

如何以编程方式从 FooService 接口生成方法名称列表,即 ["Foo1", "Foo2"]?

答案:

要从接口类型中检索方法名称列表,可以使用运行时反射:

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

说明:

  1. reflect.TypeOf( (*FooService)(nil)).Elem() 检索接口的reflect.Type。
  2. t.NumMethod() 返回接口中方法的数量。
  3. t.Method (i) 检索接口的第 i 个方法。
  4. t.Method(i).Name 返回方法的名称。

Playground 示例:

https://go.dev/play/p/6cXnZKiKiKVw1

提示:

请参阅“如何获取接口的reflect.Type?”有关获取接口的 Reflect.Type 的见解。

以上是如何以编程方式列出 Go 接口中定义的方法名称?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn