アンエクスポートパッケージの機能を呼び出すためにgolangは、例えば パッケージ機能の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を呼び出す通常の解決策はありません。これがEXPORTの意味です。実際にはリフレクトパッケージを使用すると構造体のUNEXPORTED APIを呼び出すことができますが、これはパッケージのUNEXPORTED APIを呼び出すための同様のハックメソッドがあるかどうかを思い出させる方法です。ありがとう – Hui
@Hui別のパッケージから非エクスポート関数を呼び出す異常な方法はありません。 – icza
入手しました。ありがとう。 – Hui