【发布时间】:2016-03-01 22:02:29
【问题描述】:
有没有办法在 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") }
当我尝试这个时,我收到一个错误,指出以前声明了相同的函数,特别是 . 导入。
我可以做一个语法技巧来阻止用户将 bfunc.BFunc() 方法全局导入到他们的代码中吗?
更新
这可以用更简单的 sn-p 来描述。
package main
import . "fmt"
func Print(t string) {
Print("ASDF")
}
func main() {
Print("ASDF")
}
这不起作用,因为 Print 被重新声明。如果有办法解决这个问题,以便重新声明 Print ,那么这将有效地回答我原来的问题。
【问题讨论】:
-
根据需要的安全性(例如,您是否以不需要逃避沙箱或其他方式的方式执行任意代码?),您可能需要考虑将某些包列入黑名单。跨度>
-
是:不导出 BFunc。