隐藏全局函数

时间:2016-03-01 22:02:30

标签: 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") }

当我尝试这个时,我得到一个错误,即先前声明了相同的函数,特指.导入。

我是否可以做一个语法攻击来防止用户将bfunc.BFunc()方法全局导入到他们的代码中?

更新

可以使用更简单的代码段来描述。

package main
import . "fmt"
func Print(t string) { 
   Print("ASDF")
}
func main() {
    Print("ASDF")
}

哪个不起作用,因为Print已重新声明。如果有办法解决这个问题,以便可以重新声明打印,那么这将有效地回答我原来的问题。

1 个答案:

答案 0 :(得分:2)

如果您不希望图书馆用户使用某项功能,请不要导出该功能。

在另一个包中定义的阴影标识符是不可能的。即使在同一个包中也不可能隐藏命名函数。