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

Hui*_*Hui 0 reflection go

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

package testlib

import "fmt"

func hello() {
    fmt.Println("Hello testlib")
}
Run Code Online (Sandbox Code Playgroud)

并且主要包裹有来电:

package main

import (
  _ "reflect"

    "testlib"
)

func main() {
    testlib.hello()
}
Run Code Online (Sandbox Code Playgroud)

当然,这个程序是不正确的.我google了很多,很多人提到反射包可以用来调用一个未导出的函数,如:

obj := ... (some object)
val := reflect.ValueOf(obj);
fun := val.MethodByName("hello")
fun.Call([]reflect.Value{})
Run Code Online (Sandbox Code Playgroud)

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

icz*_*cza 9

你不能.这是未导出功能的目的.只有声明包可以调用它.

如果您是包编写者,并且需要从其他包中调用它,则将其导出.如果它不是你的包裹,那么不要试着打电话给它.它不是行李的API的一部分,它是一个实现细节,因此它可能随时改变(它可能会改变,它的签名可能会改变,它可能会被重命名,或者它可能随时被完全删除).