有没有办法在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()方法全局导入到他们的代码中?
更新
可以使用更简单的代码段来描述。
package main
import . "fmt"
func Print(t string) {
Print("ASDF")
}
func main() {
Print("ASDF")
}
哪个不起作用,因为Print已重新声明。如果有办法解决这个问题,以便可以重新声明打印,那么这将有效地回答我原来的问题。
答案 0 :(得分:2)
如果您不希望图书馆用户使用某项功能,请不要导出该功能。
在另一个包中定义的阴影标识符是不可能的。即使在同一个包中也不可能隐藏命名函数。