反射可以根据传入结构体名称调用不同的结构体函数。

首先,我们需要使用反射获取结构体的类型:

// 获取结构体类型
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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录