Go 反射:根据传入结构体名称调用不同结构体函数
反射可以根据传入结构体名称调用不同的结构体函数。
首先,我们需要使用反射获取结构体的类型:
// 获取结构体类型
t := reflect.TypeOf(structName{})
然后,我们可以使用反射创建一个结构体实例:
// 创建结构体实例
v := reflect.New(t).Elem()
接下来,我们可以使用反射调用结构体的方法:
// 调用结构体方法
m := v.MethodByName(methodName)
m.Call(nil)
其中,methodName 是要调用的方法名称,nil 表示没有参数。
完整的示例代码如下:
package main
import (
"fmt"
"reflect"
)
type StructA struct{}
func (a *StructA) FuncA() {
fmt.Println('FuncA')
}
type StructB struct{}
func (b *StructB) FuncB() {
fmt.Println('FuncB')
}
func main() {
// 根据结构体名称调用不同结构体函数
structName := "StructA"
methodName := "FuncA"
// 获取结构体类型
t := reflect.TypeOf(StructA{})
// 根据结构体名称调用不同结构体函数
if structName == "StructB" {
t = reflect.TypeOf(StructB{})
methodName = "FuncB"
}
// 创建结构体实例
v := reflect.New(t).Elem()
// 调用结构体方法
m := v.MethodByName(methodName)
m.Call(nil)
}
输出结果为:
FuncA
原文地址: https://www.cveoy.top/t/topic/lqYI 著作权归作者所有。请勿转载和采集!