go:結構體的可訪問性


1.要使某個符號對其他包( package)可見(即可以訪問),需要將該符號定義為以大寫字母開頭------摘自go相關書籍
2.go只限制包內外的可訪問性,而不限制同包內不同文件的可訪問性

 

本文討論結構體三個部分的可訪問性:結構體本身、結構體變量、結構體變量的成員變量

在討論某一部分時,保證其它部分包外可訪問。

 

1. 結構體本身   的可訪問性

  test1.go:

package tt
type Test struct {
	X int
} 

  main.go:

package main
import (
	"fmt"
	"tt"
)
var a = &tt.Test{X: 5}
func main() {
	fmt.Println(a)
}
//編譯成功,輸出:
//    &{5}

  若將test1.go中的結構體"Test"改為"test",則編譯錯誤,提示"test"不可訪問。  

  注:修改"Test"時同時修改main.go相關代碼,后續測試中默認進行修改,不再強調。

  結論:結構體名的大小寫影響結構體本身的可訪問性,首字母小寫則包外不可見(如定義結構體"test",則不能在包外定義"test"類型的結構體變量

 

2.結構體變量

  test1.go

package tt
type Test struct {
	X int
}
var t Test

  main.go

package main
import (
	"fmt"
	"tt"
)
func main() {
	fmt.Println(tt.t)
}

  編譯錯誤,提示tt.t不可訪問;將結構體變量"t"改為"T"后,程序正常運行,輸出  {0}

  結論:同上,結構體變量名的首字母大小寫   將影響其在包外的可訪問性。

 

3.結構體變量的成員變量

  1)不同包

  test1.go

package tt
type test struct {
	x int
}
var T test

  main.go

package main
import (
	"fmt"
	"tt"
)
func main() {
	fmt.Println(tt.T.x)
}

  編譯錯誤,提示tt.T.x不可訪問;將T成員變量"x"改為"X"后,程序正常運行,輸出  0  

  結論:同上。

  2)同包

package main
import (
	"fmt"
)
type test struct {
	x int
}
func main() {
	t := new(test)
	fmt.Println(t.x)
}

  程序正常運行,輸出  0。

  結論:同包內,結構體變量的成員變量可隨時被訪問,不受首字母大小寫的影響(即便成員變量小寫,也可被直接訪問,而不需要通過成員函數來實現)。 

  

 

 

 

 

  

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM