【发布时间】:2014-03-02 21:05:03
【问题描述】:
以关于calling a method by name 的问题为起点,我想通过名称调用一个方法并实际使用该值做一些事情。
package main
import "fmt"
import "reflect"
type T struct{}
func (t *T) Foo() {
fmt.Println("foo")
}
type MyStruct struct {
id int
}
type Person struct {
Name string
Age int
}
func (t *T) Bar(ms *MyStruct, p *Person) int {
return p.Age
}
func main() {
var t *T
reflect.ValueOf(t).MethodByName("Foo").Call([]reflect.Value{})
var ans int
ans = reflect.ValueOf(t).MethodByName("Bar").Call([]reflect.Value{reflect.ValueOf(&MyStruct{15}), reflect. ValueOf(&Person{"Dexter", 15})})
}
Playground link, http://play.golang.org/p/e02-KpdQ_P
但是,我收到以下错误:
prog.go:30: cannot use reflect.ValueOf(t).MethodByName("Bar").Call([]reflect.Value literal) (type []reflect.Value) as type int in assignment
[process exited with non-zero status]
我应该做些什么不同的事情来实际返回一个值?我尝试使用类型转换并使其成为int,但编译器说它不能[]reflect.Value。
【问题讨论】:
标签: oop reflection methods go