我想访问名为“pastry”的包的私有函数。但它会产生错误: 对未导出标识符的无效引用
指定在main中可以访问golang的私有函数的方式。
答案 0 :(得分:4)
您可以使用go:linkname
来映射相同/不同程序包中的函数
在您的某些功能。例如:
package main
import (
"fmt"
_ "net"
_ "unsafe"
)
//go:linkname lookupStaticHost net.lookupStaticHost
func lookupStaticHost(host string) []string
func main() {
fmt.Println(lookupStaticHost("localhost"))
}
在我的计算机上执行时将产生[127.0.0.1 ::1]
。
答案 1 :(得分:2)
根据定义,私有函数在声明它们的包之外是不可访问的。
如果你需要在该软件包之外使用该函数,则必须将其公开(更改函数名称,以大写形式转换第一个字母)。
例如:如果您func doSomething()
将其重命名为func DoSomething()
并在<package name>.DoDomething()
答案 2 :(得分:2)
您还可以添加公共代理功能。
例如:
你有包私有功能
func foo() int {
return 42
}
你可以在同一个包中创建公共函数,它将调用package-private函数并返回它的结果
func Bar() int {
return foo()
}
答案 3 :(得分:0)
(让我们说mypackage)你有糕点功能添加:
var Pastry = pastry
主包中的:
mypackage.Pastry()