Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 全局函数的阴影_Go_Dsl_Shadowing - Fatal编程技术网

Go 全局函数的阴影

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

有没有办法在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")
}

这不起作用,因为打印是重新申报的。如果有一种方法可以绕过这个问题,以便重新申报印刷品,那么这将有效地回答我最初的问题

如果不希望库的用户使用函数,则不要导出该函数


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

取决于这需要的安全性(例如,您是否以一种不需要沙箱或其他东西的方式执行任意代码?),您可能需要考虑黑名单某些软件包。是的:不要导出BFunc。