go:結構體的可訪問性

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。

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

相關文章
相關標籤/搜索