英文:
How to access private functions of another package in Golang?
问题
我想访问一个名为"pastry"的包的私有函数。但是它会生成错误信息:
无效的对未导出标识符的引用
请指定在主函数中如何访问golang的私有函数。
英文:
I want to access a private function of a package called "pastry". But it generates error as:
invalid reference to unexported identifier
Specify the way by which private functions of golang are accessible in main.
答案1
得分: 15
你可以使用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]
。
英文:
You can use go:linkname
to map functions from same/different package
to some function in yours. For example like:
package main
import (
"fmt"
_ "net"
_ "unsafe"
)
//go:linkname lookupStaticHost net.lookupStaticHost
func lookupStaticHost(host string) []string
func main() {
fmt.Println(lookupStaticHost("localhost"))
}
will produce [127.0.0.1 ::1]
when executed on my machine.
答案2
得分: 8
私有函数在定义上是不可在其所在的包之外访问的。
如果你需要在包之外使用该函数,你必须将其设为公有函数(修改函数名,将首字母改为大写)。
例如:如果你有一个 func doSomething()
,将其重命名为 func DoSomething()
,然后可以在包之外使用 <包名>.DoSomething()
。
英文:
Private functions are, by definition, not accessible outside the package in which they are declared.
If you need that function outside that package, you must make it public (change the function name, turning the first letter in upper case).
Eg: if you have func doSomething()
rename it to func DoSomething()
and use it outside the package with <package name>.DoDomething()
答案3
得分: 7
你还可以添加公共代理函数。
例如:
你有一个包私有函数
func foo() int {
return 42
}
你可以在同一个包中创建一个公共函数,该函数将调用包私有函数并返回其结果
func Bar() int {
return foo()
}
英文:
You can also add public proxy-function.
For example:
You have package-private function
func foo() int {
return 42
}
You can create public function in the same package, which will call the package-private function and return it's result
func Bar() int {
return foo()
}
答案4
得分: 3
在包(假设为mypackage)中,您有一个名为pastry的函数。请添加以下代码:
var Pastry = pastry
在主包中:
mypackage.Pastry()
请注意,这是一个示例代码,具体实现可能会根据您的需求而有所不同。
英文:
in the package (let's say mypackage) where you have pastry function add:
var Pastry = pastry
in main package:
mypackage.Pastry()
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论