1.要使某個符號對其餘包( package)可見(便可以訪問),須要將該符號定義爲以大寫字母開頭------摘自go相關書籍
2.go只限制包內外的可訪問性,而不限制同包內不一樣文件的可訪問性函數
本文討論結構體三個部分的可訪問性:結構體自己、結構體變量、結構體變量的成員變量測試
在討論某一部分時,保證其它部分包外可訪問。spa
1. 結構體自己 的可訪問性blog
test1.go:編譯
package tt type Test struct { X int }
main.go:class
package main import ( "fmt" "tt" ) var a = &tt.Test{X: 5} func main() { fmt.Println(a) } //編譯成功,輸出: // &{5}
若將test1.go中的結構體"Test"改成"test",則編譯錯誤,提示"test"不可訪問。 test
注:修改"Test"時同時修改main.go相關代碼,後續測試中默認進行修改,再也不強調。import
結論:結構體名的大小寫影響結構體自己的可訪問性,首字母小寫則包外不可見(如定義結構體"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。
結論:同包內,結構體變量的成員變量可隨時被訪問,不受首字母大小寫的影響(即使成員變量小寫,也可被直接訪問,而不須要經過成員函數來實現)。