2017-04-07 57 views
0

我想聲明一個指向全局結構的指針,以便我可以在我的包中的其他文件中訪問此指針。我怎麼做?將全局指針聲明爲結構體

詳情: 套餐Y已結構命名爲「羣集」,也叫NEWCLUSTER一些功能等等。現在

type Cluster struct { 
} 
func NewCluster(self *Node, credentials Credentials) *Cluster { 
    return &Cluster{ 
    } 
} 

,從包「X」當我嘗試如下訪問上述集羣,它做工不錯

集羣:= Y.NewCluster(節點,證書)

現在,我想聲明這個「集羣」作爲一個全局變量,這樣我可以訪問它在我的「X」包的其他文件中。所以,我試圖用很多方式宣佈它,但它不工作。我如何在全球範圍內宣佈它?然後如何在我的「X」包的其他文件或其他文件中訪問它(調用相同的NewCluster函數)?

編輯: 我試過聲明爲var cluster Cluster,var * cluster Cluster,var cluster * Cluster等,但沒有任何效果。

+0

'var cluster * Cluster' ---這個怎麼了? – zerkms

+0

它說未定義:包X中的集羣 – Innocentguy

+0

,使用'var cluster * Y.Cluster'。 – zzn

回答

0

的標識符表示一個常數,類型,變量或函數 (但不是法)範圍內聲明在頂層(任何函數之外) 是包裝塊。

Go Language Specification: Scope

因此,在一個包文件中的函數之外聲明的變量應該在任何其他包文件可用。

我想這裏所缺少的是集羣類型的軟件包名稱:您需要一個合格的標識符。

合格的標識符是一個符合包名 前綴的標識符。包名稱和標識符不能爲空。

Go Language Specification: Qualified Identifiers

類型羣集在包Y規定,因爲是功能NEWCLUSTER。當您從包X訪問NEWCLUSTER,你用的包名和一個點前綴的函數名稱中使用合格的標識符:

cluster := Y.NewCluster(node, credentials) 

,當你試圖從包X在包Ÿ引用一個類型,需要使用合格的標識符來完成。例如:

var cluster *Y.Cluster