2016-03-01 81 views
-2

有沒有一種方法可以在全局範圍內隱藏一個函數在golang包中?在一些去文件,我不希望用戶能夠調用BFunc ......也就是說,我希望把它包起來......隱藏全局函數

// Lets say this package provides BFunc() 
// And I have a naughty user who wants to import it 
. "github.com/a/bfunc" 

因此,在另一個在全球範圍內去文件,我可以做:

func BFunc() { fmt.Print("haha I tricked you") } 

當我嘗試,我得到一個錯誤,有相同功能的先前聲明,特指在.進口。

會有語法破解我可以做的,以防止用戶從全局導入bfunc.BFunc()方法到他們的代碼?

UPDATE

這可以使用一個更簡單的代碼段進行說明。

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

哪個不行,因爲Print被重新聲明。如果有一種方法可以解決這個問題,那麼Print可以被重新聲明,那麼這將有效地回答我原來的問題。

+0

根據需要的安全程度(例如,您是否以不需要轉義沙箱或其他方式執行任意代碼?),您可能需要考慮將某些包列入黑名單。 – joshlf

+4

是的:不要輸出BFunc。 – Volker

回答

2

如果您不希望庫的用戶使用函數,則不要導出該函數。

在另一個包中定義的遮蔽標識符是不可能的。即使在相同的包中,隱藏命名函數也是不可能的。