go - 执行不接受参数的方法
问题描述
给定一个结构的任意实例,我希望能够执行其所有不接受参数的公共方法。
例如在下面的代码中,我希望能够在不知道它们存在的情况下执行 X{}.Foo() 和 X{}.Bar()。
package main
import (
"fmt"
"reflect"
)
type X struct {
Y string
}
func (x X) Foo() string {
return x.Y
}
func (x X) Bar() {
}
func (x X) Baz(q string) {
}
func main() {
fooType := reflect.TypeOf(X{})
for i := 0; i < fooType.NumMethod(); i++ {
method := fooType.Method(i)
fmt.Println(method.Name)
}
}
解决方案
- 更改
reflect.TypeOf
为reflect.ValueOf
- 检查的类型以
Method
确保它接受零参数 - 调用方法
Call
foo := reflect.ValueOf(X{})
for i := 0; i < foo.NumMethod(); i++ {
method := foo.Method(i)
if method.Type().NumIn() == 0 {
method.Call(nil)
}
}
推荐阅读
- r - 在 VisNetwork 中选择节点时如何显示节点的标签?
- python - 如何可视化多列的k-means
- python - 使用 Gym 训练机器人走路
- angular - 每 x 秒从 Observable 获取数据,使用开始和停止按钮
- angular - 如何从 @ngxs/router-plugin 内部和其他状态初始化之前检索 RouterState
- python - 为什么在创建文件复制程序时出现 zip 错误?
- android - 如何使状态栏中的所有通知可见?
- python - 如何仅存储从频繁更新的网站抓取的数据中更改的部分?
- python - 无法使用大小的 DateTime 字段创建 django 表
- unity3d - 我怎样才能在我的凸轮看的方向上统一滚动一个球?