golang如何调用未报告的包函数

golang如何调用未报告的包函数,go,reflection,Go,Reflection,例如,如何调用未报告的包函数 包函数hello()定义为: package testlib import "fmt" func hello() { fmt.Println("Hello testlib") } 并且有来自主包的调用: package main import ( _ "reflect" "testlib" ) func main() { testlib.hello() } 当然,这个程序是不正确的。 我在谷歌上搜索过很多很多人提到refle

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

package testlib

import "fmt"

func hello() {
    fmt.Println("Hello testlib")
}
并且有来自主包的调用:

package main

import (
  _ "reflect"

    "testlib"
)

func main() {
    testlib.hello()
}
当然,这个程序是不正确的。 我在谷歌上搜索过很多很多人提到reflect包可以用来调用未报告的函数,比如:

obj := ... (some object)
val := reflect.ValueOf(obj);
fun := val.MethodByName("hello")
fun.Call([]reflect.Value{})
但所有示例都基于对象(即结构),而不是包。
我的问题是我要调用一个包函数,而不是一个对象函数。谢谢。

你不能。这就是未报告函数的目的。只有声明包才能调用它


如果您是包编写器,需要从其他包中调用它,然后将其导出。如果不是你的包裹,那就不要打电话给它。它不是PackAge API的一部分,它是一个实现细节,因此它可能随时更改(它所做的事情可能会更改,它的签名可能会更改,它可能会被重命名,或者它可能会在任何时候被完全删除)。

是的,我理解它;没有正常的解决方案来调用这种API,这就是导出的含义;但事实上,如果我们使用reflect包,结构的未报告API仍然可以被调用,这提醒了我是否有类似的hack方法来调用包的未报告API。Thanks@Hui从另一个包调用未报告的函数也没有任何异常的方法。明白了。谢谢