例如,如何调用未导出的包函数
包函数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/