在struct方法内部,如何使用反射来调用struct方法?例如:
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"
}
即使存在<invalid reflect.Value>
,以下代码也会打印fake
。
提前谢谢! :)
答案 0 :(得分:4)
问题在于:
&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
答案 1 :(得分:1)
您需要导出方法并调用它:
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"
}