gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 21:15:43 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com