使用反射来调用结构体方法中的结构方法



如何使用 reflect 在结构方法中调用结构方法? 例如:

package main
import "fmt"
import "reflect"
type T struct{}
func (t *T) New() {
value := getDynamicValue()
method := reflect.ValueOf(&t).MethodByName(value)
fmt.Println(method)
}
func (t *T) fake() {
fmt.Println("Fake!")
}
func main() {
var t T
t.New()
}
func getDynamicValue() string {
return "fake"
}

即使fake存在,以下代码也会打印<invalid reflect.Value>

提前感谢! :)

问题是:

  • &t传递给ValueOf而不是t
  • 不导出fake方法

这是一个工作示例:

package main
import "fmt"
import "reflect"
type T struct{}
func (t *T) New() {
value := getDynamicValue()
method := reflect.ValueOf(t).MethodByName(value)
fmt.Println(method)
}
func (t *T) Method() {
fmt.Println("Hello world!")
}
func main() {
var t T
t.New()
}
func getDynamicValue() string {
return "Method"
}

输出

0xec820

自己尝试一下

您需要导出该方法并调用它:

package main
import "fmt"
import "reflect"
type T struct{}
func (t *T) New() {
value := getDynamicValue()
method := reflect.ValueOf(t).MethodByName(value)
fmt.Println(method.Call(nil))
}
func (t *T) Fake() {
fmt.Println("Fake!")
}
func main() {
var t T
t.New()
}
func getDynamicValue() string {
return "Fake"
}

最新更新