【问题标题】:Shadowing a global function遮蔽全局函数
【发布时间】: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。

标签: go dsl shadowing


【解决方案1】:

如果您不希望库的用户使用某个函数,请不要导出该函数。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    相关资源
    最近更新 更多