go - 声明指向结构的全局指针

标签 go

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

详细信息: 包 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/

相关文章:

mongodb - slice 元素的查找`from`集合上的match字段不起作用

go - 为什么我用 openssl 和 golang 生成的 RSA 签名不同?

google-app-engine - 如何过滤 GAE 查询?

go - 如何在golang模板中的LOOP内执行IF/ELSE条件?

Docker 容器网络主机模式适用于 CLI,但不适用于 Go SDK

Go 和一个糟糕的素数算法

algorithm - Go中几乎增加的序列:如何循环避免索引越界?

go - 如果这个函数的调用者已经完成,golang 阻塞函数会发生什么?

go - rabbitmq/amqp 直接回复并返回通知

go - 如何使用 channel 和 goroutines 构建 Go Web 服务器?