繁体   English   中英

使用反射来调用方法并返回值

[英]Using reflection to call a method and return a value

使用关于以名称调用方法的问题作为起点,我想以名称调用方法,并实际使用值进行操作。

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})})
}

游乐场链接,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

Call返回作为切片的[]reflect.Value 您需要从切片中获取元素才能进行类型转换。 一旦有了reflect.Value实例,就可以调用Int()以将值作为int64来获取。

var ans int64
ans = reflect.ValueOf(t).MethodByName("Bar").Call([]reflect.Value{
    reflect.ValueOf(&MyStruct{15}), 
    reflect.ValueOf(&Person{"Dexter", 15})})[0].Int()
fmt.Println(ans)

操场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM