博客地址:http://www.reibang.com/p/d3c33e243a71
一他宛、含義簡介
1.1馍管、首字母大寫 == public
1.2、首字母小寫 == private
注意:這個(gè) public 和 private 是相對(duì)于 go 文件首行 package 聲明的包名來說
二硅则、package 聲明的包名與該文件所處于實(shí)際文件系統(tǒng)中目錄的關(guān)系
2.1癞揉、一般情況下建議這個(gè)包名和所在的目錄名保持一致,這樣容易辨認(rèn)铣猩。但不一致也是可以的揖铜,比如我在 src/aa/bb 目錄下新建了 fab.go 文件,我在 fab.go 開頭达皿,聲明包名 package pab天吓,聲明與實(shí)際目錄不一致。
package pab
type (
? ? ? ? ? EventObserver struct { ?// 大寫外包可訪問
? ? ? ? ? ? ? ? ? id int ?// 小寫外包不可訪問
? ? ? ? ? }
? ? ? ? ? EventNotifier struct { // 大寫外包可訪問
? ? ? ? ? ? ? ? ? ID int // 大寫外包可訪問
? ? ? ? ? }
? ? ? ? ? event struct { // 小寫外包不可訪問
? ? ? ? ? ? ? ? ?id int ?// 小寫外包不可訪問
? ? ? ? ? ?}
)
func testAuthA() { // 外包不可訪問
? ? ? ? // 在同一個(gè)包里方法和屬性大小寫都可以訪問峦椰。
? ? ? ? n := &event { id : 1 } ?
}
func TestAuthB() { ?// 外包可訪問
}
2.2龄寞、使用 import 的時(shí)候,import 后面的跟著的是文件所在的目錄(比如剛才創(chuàng)建文件的目錄 src/cc/dd?)汤功,不是 package 聲明的包名物邑,如果需要使用該文件需要 import pab 引用。
package pcd
// import pab 錯(cuò)誤
import aa/bb
func testAuth(){
? ? ? ?// n := &pab.EventObserver{ id : 1 } ?會(huì)報(bào)錯(cuò),id 小寫跨包無法訪問
? ? ? ?n1 := &pab.EventNotifier { ID : 1 }
? ? ? ?// pab.testAuthA() 錯(cuò)誤色解,訪問不到
? ? ? ?pab.TestAuthB()
}
三茂嗓、兩個(gè) Go 文件針對(duì)目錄和 package 不同組合的訪問情況
3.1、兩個(gè) Go 文件在同一個(gè)目錄里科阎,不同的 package 名
Goland 語法無法不通過述吸,不允許在同一個(gè)路徑下,在不同 Go 文件里聲明不同的包名
3.2锣笨、兩個(gè) Go 文件在不同的目錄蝌矛,同一個(gè)包名
與不同的目錄,不同的包名效果一致错英,受大小寫權(quán)限影響朴读。
3.3、兩個(gè) Go 文件在同一個(gè)目錄走趋,同一個(gè)包名
和在同一個(gè) Go 文件里效果一樣衅金,不受大小寫權(quán)限影響都可以相互訪問。
參考博客:https://blog.csdn.net/LightUpHeaven/article/details/80817462