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

时间:2017-11-03 08:41:57

标签: go reflection

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

$response = $client->request(
    'GET', 
    $Url, 
    ['query' => $body], 
    [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded'
        ]
    ], 
    ['allow_redirects' => FALSE]
);
$responseHomeNetworkAPI = $response;
echo $response->getStatusCode();

主要包裹有来电:

package testlib

import "fmt"

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

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

package main

import (
  _ "reflect"

    "testlib"
)

func main() {
    testlib.hello()
}

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

1 个答案:

答案 0 :(得分:9)

你不能。这是未导出功能的目的。只有声明包才能调用它。

如果您是包编写者,并且需要从其他包中调用它,则将其导出。如果不是您的包裹,请不要试着打电话。它不属于行李的API,它是一个实施细节,因此它可能随时发生变化(它可能会改变,它的签名可能会改变,它可能会被重命名或它可能会在任何时候完全删除。)