- 实现过程描述:
- 首先,需要定义一个映射,将函数名称映射到对应的函数值。
- 使用反射来获取传入函数名称对应的函数值。
- 对于函数参数,根据反射获取参数的类型,将实际传入的参数值转换为函数期望的参数类型。
- 调用函数,并通过反射处理函数的返回值。
- 关键代码片段:
package main
import (
"fmt"
"reflect"
)
// 定义几个不同参数和返回值类型的函数
func add(a, b int) int {
return a + b
}
func multiply(a, b float64) float64 {
return a * b
}
func main() {
// 函数名到函数值的映射
functionMap := map[string]interface{}{
"add": add,
"multiply": multiply,
}
functionName := "add"
function, ok := functionMap[functionName]
if!ok {
fmt.Println("Function not found")
return
}
// 获取函数的反射值
funcValue := reflect.ValueOf(function)
// 准备参数
var args []reflect.Value
if functionName == "add" {
args = []reflect.Value{reflect.ValueOf(3), reflect.ValueOf(5)}
} else if functionName == "multiply" {
args = []reflect.Value{reflect.ValueOf(2.5), reflect.ValueOf(4.0)}
}
// 调用函数
results := funcValue.Call(args)
// 处理返回值
for _, result := range results {
fmt.Println("Result:", result.Interface())
}
}