Go 反射:跨包函数调用指南
在 Go 语言中,可以使用反射来执行不同包的函数。具体步骤如下:
- 首先,使用 'reflect.TypeOf' 函数获取函数的类型信息。例如,假设我们要执行一个名为 'MyFunc' 的函数,其定义如下:
package mypackage
func MyFunc(a int, b string) {
// ...
}
则可以使用如下代码来获取函数的类型信息:
funcType := reflect.TypeOf(mypackage.MyFunc)
- 然后,使用 'reflect.ValueOf' 函数将函数转换为 'reflect.Value' 类型。例如:
funcValue := reflect.ValueOf(mypackage.MyFunc)
- 接下来,可以使用 'funcValue.Call' 函数来执行函数。这个函数的参数是一个 '[]reflect.Value' 类型的切片,其中包含了函数的参数值。例如,假设我们要执行 'MyFunc' 函数,并传递参数 'a=123' 和 'b="hello"',则可以使用如下代码:
args := []reflect.Value{reflect.ValueOf(123), reflect.ValueOf("hello")}
funcValue.Call(args)
完整示例代码如下:
package main
import (
"reflect"
"mypackage"
)
func main() {
funcType := reflect.TypeOf(mypackage.MyFunc)
funcValue := reflect.ValueOf(mypackage.MyFunc)
args := []reflect.Value{reflect.ValueOf(123), reflect.ValueOf("hello")}
funcValue.Call(args)
}
原文地址: https://www.cveoy.top/t/topic/lpMh 著作权归作者所有。请勿转载和采集!