如何在Golang中访问另一个包的私有函数?

时间:2016-03-15 10:59:02

标签: function go

我想访问名为“pastry”的包的私有函数。但它会产生错误: 对未导出标识符的无效引用

指定在main中可以访问golang的私有函数的方式。

4 个答案:

答案 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()