Go 反射:根据参数动态执行结构体方法
反射可以根据参数去执行不同的结构函数,具体实现步骤如下:
-
获取结构体对象的类型信息,可以使用
reflect.TypeOf()方法获取。 -
通过类型信息获取结构体对象的值,可以使用
reflect.New()方法获取。 -
根据方法名获取结构体对象中对应的方法信息,可以使用
reflect.ValueOf()方法获取。 -
根据传入的参数列表,使用
reflect.ValueOf()方法将参数转换为reflect.Value类型的值。 -
调用方法,可以使用
reflect.Value.Call()方法。
以下是一个示例代码:
import "fmt"
import "reflect"
type MyStruct struct {
Name string
Age int
}
func (s *MyStruct) SayHello() {
fmt.Printf("Hello, my name is 's.Name' and I am 's.Age' years old\n", s.Name, s.Age)
}
func (s *MyStruct) Say(msg string) {
fmt.Printf("%s, my name is 's.Name' and I am 's.Age' years old\n", msg, s.Name, s.Age)
}
func main() {
// 创建结构体对象
s := &MyStruct{
Name: "Tom",
Age: 18,
}
// 根据方法名获取对应的方法信息
method := reflect.ValueOf(s).MethodByName("SayHello")
// 调用方法
method.Call(nil)
// 根据方法名获取对应的方法信息
method = reflect.ValueOf(s).MethodByName("Say")
// 构造参数列表
args := []reflect.Value{
reflect.ValueOf("Nice to meet you"),
}
// 调用方法
method.Call(args)
}
输出结果为:
Hello, my name is 'Tom' and I am 18 years old
Nice to meet you, my name is 'Tom' and I am 18 years old
原文地址: https://www.cveoy.top/t/topic/lpN7 著作权归作者所有。请勿转载和采集!