golang 反射 调用 其他包的方法

作者: cayman 分类: 杂七杂八 发布时间: 2023-05-07 23:22

问题 :

golang 反射 调用 其他包的方法

#### 回答:

在 golang 中,反射可以用来调用其他包的方法,但是需要满足以下条件:

  1. 被调用的方法必须是导出的,即函数名首字母要大写。
  2. 被调用的方法必须属于已导入的包。
  3. 被调用的方法必须符合反射函数的输入参数和返回值要求。

具体代码实现如下:

package main

import (
    \"fmt\"
    \"reflect\"
    \"包名\"
)

func main() {
    pkg := reflect.ValueOf(包名)
    method := pkg.MethodByName(\"函数名\")
    args := []reflect.Value{reflect.ValueOf(参数1), reflect.ValueOf(参数2)}
    result := method.Call(args)

    // 打印返回值
    fmt.Println(result[0].Interface())
}

其中,pkg 代表包名,通过 reflect.ValueOf() 获取反射值,method 代表被调用的方法,通过 MethodByName() 方法获取,args 代表要传入的参数,为反射值的切片,result 代表函数调用的结果,为反射值的切片。

注意,反射方法调用的时间和空间开销相比普通函数调用要大得多,因此应该尽可能地避免使用。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注