Go的package(包)的作用如下。
Go的package與Java的package作用類似,皆是用來組織原始碼檔(source files)的目錄。原始碼檔即副檔名為.go
的檔案,簡稱go檔;換句話說一個package中會有零到多個go檔。
專案的功能越多代表原始碼檔越多,為了維護方便會把具有相同性質或行為的原始碼檔集中在一起,也就是放入同一個package中,如同把桌面上散亂的檔案分門別類地放入適合的資料夾一般。此外package可避免程式的命名衝突,不同package的原始碼檔中可使用相同的函式名稱,package即為一個命名空間(namespace)。
在go原始碼檔中使用保留字package
宣告package的的方式如下。
package packagename
"packagename"為package的名稱,例如命名為"paint"則寫法為:
package paint
package的命名應簡短、明確及有意義,以全小寫並盡量以單字(single word)命名,避免使用底線(_
),減號(-
),駝峰命名(e.g myPackage
)分隔,不可有空白。
Go慣例上置放原始碼檔的package目錄和宣告的package名稱應相同(也可以不同,但盡量避免)。
例如專案中有處理顏色的程式叫color.go
、處理形狀的的程式叫shape.go
、處理位置的程式叫location.go
、處理地區的程式叫zone.go
,則或許可以使用package paint
來放置顏色和形狀的程式;使用package geography
來放置位置和地區的程式如下。
src/
├── geography/
│ ├── location.go
│ └── zone.go
└── paint/
├── color.go
└── shape.go
以上各程式的package宣告如下。
color.go
package paint
// other declarations
shape.go
package paint
// other declarations
location.go
package geography
// other declarations
zone.go
package geography
// other declarations
原始檔的目錄與package應相同,所以color.go
及shape.go
宣告package paint
;
location.go
及zone.go
宣告package geography
。
同個package中的原始碼檔可存取彼此的特性(例如常數、變數、函式等):而一個原始碼檔的特性必須定義為可匯出名稱(exported name)才能被不同package的原始碼檔存取。這類似於物件導向程式(OOP)的封裝(encapsulation)概念,即隱藏外界不需知道的特性,只有匯出的特性才能被外部看見及使用。
此外Go要求命令可執行的應用程式(主程式)的package必須為main
,而main
package中的go檔的func main()
函式則為執行時的進入點(entry point)。例如在「我的第一支Go程式 hello world」範例的hello.go
為可執行程式,其package即為main
。
沒有留言:
張貼留言