2017-04-07 2 views
0

구조체에 대한 포인터를 전역으로 선언하여 패키지 내 다른 파일에서이 포인터에 액세스 할 수있게하려고합니다. 어떻게해야합니까?구조체에 대한 전역 포인터 선언

세부 사항 : Y라는 구조체있다 패키지도 NewCluster라는 이름의 일부 기능을 "클러스터"등

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

이제 패키지 "X"에서 나는 다음과 같이 클러스터의 이상에 접근하려고 할 때, 그것을 좋은

클러스터를 작동합니다 = Y.NewCluster (노드, 자격 증명) 이제

, 나는 내가 액세스 할 수 있도록 전역 변수로이 '클러스터'를 선언 할 내 "X"패키지의 다른 파일에 있습니다. 그래서 나는 그것을 여러 가지 방법으로 선언하려고 노력하고 있지만 그것은 효과가 없다. 전 세계적으로 어떻게 선언합니까? 그러면 "X"패키지의 다른 파일이나 다른 파일 (동일한 NewCluster 기능을 호출하는)에서이 파일에 어떻게 액세스합니까?

편집 : var 클러스터, var * 클러스터 클러스터, var 클러스터 * 클러스터 등으로 선언했는데 아무 것도 작동하지 않았습니다.

+0

'var cluster * Cluster' ---이 중 어떤 문제가 있습니까? – zerkms

+0

패키지 X에 정의되지 않은 : – Innocentguy

+0

클러스터가 있으면 'var cluster * Y.Cluster'를 사용하십시오. – zzn

답변

0

상수 형 또는 변수 함수 (하지만 방법)을 나타내는 식별자의 범위 (모든 기능 밖에) 최상위 패키지 블록에서 선언이다.

Go Language Specification: Scope

그래서 함수의 외부에 하나 개의 패키지 파일에 선언 된 변수는 다른 패키지 파일에 사용할 수 있습니다.

여기서 누락 된 부분은 클러스터 유형의 패키지 이름입니다. 정규 식별자가 필요합니다.

정규화 된 식별자는 패키지 이름 으로 정규화 된 식별자입니다. 패키지 이름과 식별자는 모두 비워 둘 수 없습니다. 함수 NewCluster 같이

Go Language Specification: Qualified Identifiers

타입 클러스터 패키지 Y로 정의된다. 당신이 패키지 X에서 NewCluster에 액세스 할 때 패키지 이름과 점으로 함수 이름을 앞에 붙여 자격을 갖춘 식별자를 사용 :

cluster := Y.NewCluster(node, credentials) 

당신이 패키지 X에서 패키지 Y의 유형을 참조하려고하는 경우 자격있는 식별자로 처리해야합니다. 예 :

var cluster *Y.Cluster 
관련 문제