2014-03-29 146 views
6

我在package main全球範圍內的兩個變量,這些將是這些:現在訪問跨包全局變量在Go

var (
    app Application 
    cfg Config 
) 

,因爲我的應用程序的大小開始增加,我已經決定把網站的每個模塊在其自己的包,很像一個子目錄,像這樣:

/src/github.com/Adel92/Sophie 
    + user/ (package user) 
    - register.go 
    - login.go 
    - password.go 
    + topic/ (package topic) 
    - ... etc 
    - main.go (package main) 

我怎麼會去繞繞從其他包訪問appcfg全局變量?這是否是錯誤的方式?我有一種感覺。

在這種情況下,我將如何在自己的名稱空間中聲明函數,所以我不必瘋狂地使用與usertopic貼在一起的名字。

在此先感謝。

回答

7

大寫的變量名稱被導出以便在其他包中訪問,因此AppCfg可以工作。但是,通常不推薦使用子包名稱間距。軟件包旨在用於獨立的自包含功能,因此通常比使用這種方式更麻煩(例如,導入週期是不可能的,因此如果在此佈局中有兩個需要與之交談的子軟件包彼此然後你運氣不好)。

如果你發現你需要前綴usertopic的東西,以避免名稱衝突,那麼也許下面的概念應被納入了自己的包,您可以user和一個創建它的一個實例爲topic

+0

這是沒有意義的,因爲用戶/主題不是自包含的東西,它們主要依賴於package main的功能。 –

+0

好吧,因爲似乎沒有更好的選擇,我會投票並接受答案。謝謝。 –

+3

如果用戶/主題在很大程度上依賴於main的功能,那表明它們應該屬於主包。因爲你不能有依賴循環,所以依賴關係只能從main向下「流」。 – Evan