包是函數(shù)和數(shù)據(jù)的集合,將有相關(guān)特性的函數(shù)和數(shù)據(jù)放在統(tǒng)一的文件/目錄進(jìn)行管理,每個包都可以作為獨(dú)立的單元維護(hù)并提供給其他項(xiàng)目進(jìn)行使用
聲明
Go源文件都需要在開頭使用package聲明所在包,包名告知編譯器哪些是包的源代碼用于編譯庫文件中燥,其次包名用于限制包內(nèi)成員對外的可見性寇甸,最后包名用于在包外對公開成員的訪問
包名使用簡短的小寫字母,常與所在目錄名保持一致疗涉,一個包中可以由多個Go源文件拿霉,但必須使用相同包名
聲明兩個包,路徑分別為gpkgname/pkg01和gpkgname/pkg02
導(dǎo)入&調(diào)用
在使用包時需要使用import將包按路徑名導(dǎo)入咱扣,再通過包名調(diào)用成員
可通過import每行導(dǎo)入一個包绽淘,也可使用括號包含所有包并使用一個import導(dǎo)入
工作目錄結(jié)構(gòu)說明:
- bin: 用于放置發(fā)布的二進(jìn)制程序
- pkg: 用于放置發(fā)布的庫文件
- src: 用于放置源代碼
運(yùn)行:
- 將chapter08/gv目錄添加到GOPATH環(huán)境變量中
- 編譯&運(yùn)行
-
使用go build編譯二進(jìn)制文件
命令:go build gpkgmain
說明:編譯路徑gpkgmain下的包,main包闹伪,則在當(dāng)前目錄產(chǎn)生以pkgmain命名的二進(jìn)制程序
-
使用go run運(yùn)行二進(jìn)制文件
命令:go run gpkgmain
-
使用go install編譯并發(fā)布二進(jìn)制文件
命令:go install gpkgmain
說明:編譯并發(fā)布路徑gpkgmain下的包沪铭,main包,則在將編譯后的以pkgmain命名的二進(jìn)制程序拷貝到bin目錄
-
使用go install編譯發(fā)布庫文件
命令:go install gpkgname/pkg01
說明:編譯并發(fā)布路徑gpkgname/pkg01下的包偏瓤,非main包杀怠,則在將編譯的以包名命名的庫文件拷貝到pkg/GOOS_GOARCH目錄下
-
使用go install編譯發(fā)布所有二進(jìn)制和庫文件
命令:go install ./…
說明:編譯并發(fā)布當(dāng)前路徑下的所有二進(jìn)制程序和庫文件
-
注意:Go語言不允許交叉導(dǎo)入包
導(dǎo)入形式
-
絕對路徑導(dǎo)入
在GOPATH目錄中查找包
示例:
- import "fmt"
- import "gpkgname/pkg01"
-
相對路徑導(dǎo)入
在當(dāng)前文件所在的目錄查找
示例:import "./gpkgname/pkg02"
-
點(diǎn)導(dǎo)入
在調(diào)用點(diǎn)導(dǎo)入包中的成員時可以直接使用成員名稱進(jìn)行調(diào)用(省略包名)
-
別名導(dǎo)入
當(dāng)導(dǎo)入不同路徑的相同包名時,可以別名導(dǎo)入為包重命名厅克,避免沖突
-
下劃線導(dǎo)入
Go不允許包導(dǎo)入但未使用赔退,在某些情況下需要初始化包,使用空白符作為別名進(jìn)行導(dǎo)入证舟,從而使得包中的初始化函數(shù)可以執(zhí)行
成員可見性
Go語言使用名稱首字母大小寫來判斷對象(常量硕旗、變量、函數(shù)女责、類型漆枚、結(jié)構(gòu)體、方法等)的訪問權(quán)限抵知,首字母大寫標(biāo)識包外可見(公開的)浪读,否者僅包內(nèi)可訪問(內(nèi)部的)
main包與main函數(shù)
main包用于聲明告知編譯器將包編譯為二進(jìn)制可執(zhí)行文件
在main包中的main函數(shù)是程序的入口,無返回值辛藻,無參數(shù)
init函數(shù)
init函數(shù)是初始化包使用碘橘,無返回值,無參數(shù)吱肌。建議每個包只定義一個痘拆。init函數(shù)在import包時自動被調(diào)用(const->var->init)
標(biāo)準(zhǔn)包
Go提供了大量標(biāo)準(zhǔn)包,可查看:https://golang.google.cn/pkg/
godoc工具
使用godoc命令可以在本地啟動golang網(wǎng)站氮墨,用于本地查看幫助手冊
幫助
-
go list std:查看所有標(biāo)準(zhǔn)包
-
go doc packagename:查看包的幫助信息
-
go doc packagename.element:查看包內(nèi)成員幫助信息