声明结构的全局指针

时间:2017-04-07 04:39:30

标签: go

我想全局声明一个结构的指针,以便我可以在我的包中的其他文件中访问此指针。我该怎么做?

详细说明: 包Y具有名为“Cluster”的结构,还有一些名为NewCluster等的函数。

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

现在,当我尝试访问上面的群集时,从包“X”开始,它运行良好

cluster:= Y.NewCluster(节点,凭据)

现在,我想将这个'cluster'声明为全局变量,以便我可以在我的“X”包的其他文件中访问它。所以,我试图宣布它很多方面,但它不起作用。我如何在全球范围内申报?然后我如何在我的“X”包的其他文件中或在同一个文件中访问它(以调用相同的NewCluster函数)?

编辑: 我尝试将其声明为var cluster Cluster,var * cluster Cluster,var cluster * Cluster等,但没有任何作用。

1 个答案:

答案 0 :(得分:0)

  

标识符的范围,表示常量,类型,变量或   在顶层声明的函数(但不是方法)(在任何函数之外)   是包块。

Go Language Specification: Scope

因此,在函数外部的一个包文件中声明的变量应该可以在任何其他包文件中使用。

我认为你在这里缺少的是群集类型的包名:你需要一个合格的标识符。

  

限定标识符是使用包名限定的标识符   字首。包名称和标识符都不能为空。

Go Language Specification: Qualified Identifiers

类型Cluster在包Y中定义,功能NewCluster也是如此。当您从包X访问NewCluster时,您通过在函数名前加上包名和一个点来使用限定标识符:

cluster := Y.NewCluster(node, credentials)

当您尝试从包X引用包Y中的类型时,您需要使用限定标识符来执行此操作。例如:

var cluster *Y.Cluster