go - 执行不接受参数的方法

标签 go reflection

给定结构的任意实例,我希望能够执行其所有不接受参数的公共(public)方法。

例如在下面的代码中,我希望能够在不知道 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)
    }
}

最佳答案

  1. 更改 reflect.TypeOfreflect.ValueOf
  2. 检查 typeMethod确保接受零参数
  3. Call调用方法
foo := reflect.ValueOf(X{})
for i := 0; i < foo.NumMethod(); i++ {
    method := foo.Method(i)
    if method.Type().NumIn() == 0 {
        method.Call(nil)
    }
}

https://play.golang.org/p/KYAfaFlEjVt

关于go - 执行不接受参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51365591/

相关文章:

function - 如何在 Golang 中编写一个将多种类型作为参数的函数?

go - 如何在 Ubuntu 的 go 1.11 中设置 GOPATH 环境变量?我必须编辑什么文件?

go - 为什么我的代码会导致停顿或竞争条件?

java - 如何调用属于某个 Activity 的 fragment 的方法

c# - 使用反射创建由 "Type"对象的内容表示的对象

database - 如何使用没有循环指针的反射在 Golang 中调用 Scan variadic 函数?

java - 获取jdk12中java.lang.reflect.Fields声明的字段

ruby-on-rails - 基于API的应用程序开发的困惑

java - 从使用反射获得的 RecyclerView 调用方法

json - 如何正确反序列化包含来自 JSON 的顶级数组的 RabbitMQ 消息