gpt4 book ai didi

oop - 使用反射调用方法并返回值

转载 作者:IT王子 更新时间:2023-10-29 01:40:05 25 4
gpt4 key购买 nike

使用关于 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

最佳答案

Call 返回 []reflect.Value 这是一个 slice 。您需要从 slice 中获取一个元素才能进行类型转换。一旦你有了一个 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)

Playground

关于oop - 使用反射调用方法并返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21594097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com