go - golang如何调用未导出的包函数

标签 go reflection

例如,如何调用未导出的包函数
包函数hello()定义为:

package testlib

import "fmt"

func hello() {
    fmt.Println("Hello testlib")
}

并且有来自主程序包的调用:
package main

import (
  _ "reflect"

    "testlib"
)

func main() {
    testlib.hello()
}

当然,该程序是不正确的。
我在Google上进行了很多搜索,很多人提到反射包可用于调用未导出的函数,例如:
obj := ... (some object)
val := reflect.ValueOf(obj);
fun := val.MethodByName("hello")
fun.Call([]reflect.Value{})

但是所有示例都基于对象(即结构),而不是包。
我的问题是,我要调用包函数,而不是对象函数。谢谢。

最佳答案

你不能这就是未导出函数的目的。只有声明包可以调用它。

如果您是包编写者,则需要从其他包中调用它,然后将其导出。如果不是您的包裹,请不要尝试调用它。它不是包装的API的一部分,而是实现的详细信息,因此它可能随时更改(它可能会更改,其签名可能会更改,可能会被重命名或随时会被完全删除)。

关于go - golang如何调用未导出的包函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47091548/

相关文章:

go - 如何使用 vscode 片段生成我自己的返回码?

c# - 获取嵌套属性及其父项的全名

c# - 如何从类型创建新的对象实例

go - 标准包窗口中的非标准导入

go - 将Base64字符串转为PNG图片并响应为http Response - Go语言

sorting - sort.Slice排序不正确

asp.net - 即使ReflectionPermission关闭,你还能使用反射吗?

c# - 如何获取基类型字段的值

c# - c#中用于反射的动态类名

go - 如何通过 `exim -t` 发送密件抄送电子邮件? ["sendmail look alike"模式]