Go 全局函数的阴影
有没有办法在golang包的全局范围内隐藏函数?在一些go文件中,我不希望用户能够调用BFunc。。。就是说,我想把它包起来Go 全局函数的阴影,go,dsl,shadowing,Go,Dsl,Shadowing,有没有办法在golang包的全局范围内隐藏函数?在一些go文件中,我不希望用户能够调用BFunc。。。就是说,我想把它包起来 // Lets say this package provides BFunc() // And I have a naughty user who wants to import it . "github.com/a/bfunc" 因此,在全局范围的另一个go文件中,我可能会: func BFunc() { fmt.Print("haha I tricked you
// Lets say this package provides BFunc()
// And I have a naughty user who wants to import it
. "github.com/a/bfunc"
因此,在全局范围的另一个go文件中,我可能会:
func BFunc() { fmt.Print("haha I tricked you") }
当我尝试此操作时,我得到一个错误,即存在相同函数的先前声明,具体指的是
导入
我能做些什么来阻止用户全局地将bfunc.bfunc()方法导入到他们的代码中呢
更新
这可以用一个更简单的片段来描述
package main
import . "fmt"
func Print(t string) {
Print("ASDF")
}
func main() {
Print("ASDF")
}
这不起作用,因为打印是重新申报的。如果有一种方法可以绕过这个问题,以便重新申报印刷品,那么这将有效地回答我最初的问题 如果不希望库的用户使用函数,则不要导出该函数
不可能隐藏在另一个包中定义的标识符。即使在同一个包中也不可能有阴影的命名函数。取决于这需要的安全性(例如,您是否以一种不需要沙箱或其他东西的方式执行任意代码?),您可能需要考虑黑名单某些软件包。是的:不要导出BFunc。