我想全局声明一个指向结构的指针,以便我可以在包内的其他文件中访问该指针。我该怎么做?
详细信息: 包 Y 有名为“Cluster”的结构体以及一些名为 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 等,但没有任何效果。
最佳答案
The scope of an identifier denoting a constant, type, variable, or function (but not method) declared at top level (outside any function) is the package block.
Go Language Specification: Scope
因此,在函数外部的一个包文件中声明的变量应该在任何其他包文件中可用。
我认为您在这里缺少的是 Cluster 类型的包名称:您需要一个合格的标识符。
A qualified identifier is an identifier qualified with a package name prefix. Both the package name and the identifier must not be blank.
Go Language Specification: Qualified Identifiers
类型 Cluster 是在包 Y 中定义的,函数 NewCluster 也是如此。当您从包 X 访问 NewCluster 时,您通过在函数名称前添加包名称和一个点来使用限定标识符:
cluster := Y.NewCluster(node, credentials)
当您尝试从包 X 引用包 Y 中的类型时,您需要使用限定标识符来执行此操作。例如:
var cluster *Y.Cluster
关于go - 声明指向结构的全局指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43269769/