英文:
Declaring global pointer to structs
问题
我想在全局范围内声明一个指向结构体的指针,以便我可以在包内的其他文件中访问这个指针。我该如何做呢?
详情:
包Y中有一个名为"Cluster"的结构体,还有一些名为NewCluster等的函数。
type Cluster struct {
}
func NewCluster(self *Node, credentials Credentials) *Cluster {
return &Cluster{
}
}
现在,在包"X"中,当我尝试像下面这样访问上述cluster时,它能正常工作
cluster := Y.NewCluster(node, credentials)
现在,我想将这个'cluster'声明为一个全局变量,以便我可以在我的"X"包的其他文件中访问它。所以,我尝试了很多种方式来声明它,但都不起作用。我该如何在全局范围内声明它?然后如何在我的"X"包的其他文件中或者同一个文件中(调用相同的NewCluster函数)访问它?
编辑:
我尝试过声明为var cluster Cluster、var *cluster Cluster、var cluster *Cluster等,但都不起作用。
英文:
I want to declare a pointer to a struct globally so that I can access this pointer in other files within my package. How do I do that?
Details:
Package Y has struct named "Cluster" and also some functions named NewCluster etc.
type Cluster struct {
}
func NewCluster(self *Node, credentials Credentials) *Cluster {
return &Cluster{
}
}
Now,from package "X" when I tried accessing above cluster as below, it works good
cluster := Y.NewCluster(node, credentials)
Now, I want to declare this 'cluster' as a global variable so that I can access it in other files of my "X" package. So, I am trying to declare it many ways but its not working. How do I declare it globally? and then how do I access it in other files of my "X"package or else in the same file (to invoke same NewCluster function)?
Edit:
I tried declaring as var cluster Cluster, var *cluster Cluster , var cluster *Cluster etc. but nothing works.
答案1
得分: 2
标识符指代在顶层(任何函数之外)声明的常量、类型、变量或函数(但不包括方法)的范围是包块。
因此,在一个包文件的函数之外声明的变量应该在任何其他包文件中都可用。
我认为你只是缺少 Cluster 类型的包名:你需要一个限定标识符。
限定标识符是一个带有包名前缀的标识符。包名和标识符都不能是空白的。
Cluster 类型在包 Y 中定义,NewCluster 函数也是如此。当你从包 X 访问 NewCluster 时,你使用了一个限定标识符,通过在函数名前加上包名和一个点号:
cluster := Y.NewCluster(node, credentials)
当你试图从包 X 引用包 Y 中的类型时,你需要使用限定标识符。例如:
var cluster *Y.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
So a variable declared in one package file outside of a function should be available in any other package file.
I think all you're missing here is the package name for the Cluster type: you need a qualified identifier.
> 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
The type Cluster is defined in package Y, as is the function NewCluster. When you accessed NewCluster from package X, you used a qualified identifier by prefixing the function name with the package name and a dot:
cluster := Y.NewCluster(node, credentials)
When you're trying to reference a type in package Y from package X, you need to do it with a qualified identifier. For example:
var cluster *Y.Cluster
1: https://golang.org/ref/spec#Declarations_and_scope "Go Language Specification: Scope"
2: https://golang.org/ref/spec#Qualified_identifiers "Go Language Specification: Qualified Identifiers"
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论