go學習筆記-包處理
阿新 • • 發佈:2018-11-09
包處理
package是go管理程式碼的重要工具,用於組織 Go 原始碼,提供了更好的可重用性與可讀性。
可見性
變數或函式名的首字母大寫時,其就是可匯出的,小寫時則是不可匯出的。
函式和變數的可訪問性是以包做隔離的。
包 函式或變數 可訪問性
同一個包 可/不可匯出的 都能訪問
其他的包 可匯出的 可訪問
其他的包 不可匯出的 不能訪問
main 函式和 main 包
可執行的程式都必須包含一個 main 函式。這個函式是程式執行的入口。main 函式應該放置於 main 包中,例如
package main import "fmt" func main() { fmt.Printf("hello world\n") }
建立自定義的包
屬於某一個包的原始檔都應該放置於一個單獨命名的資料夾裡。按照 Go 的慣例,應該用包名命名該資料夾。例如,我們建立名為animal的package,
目錄結構
src
animal
dog.go
程式碼示例
package animal
//Fox ...
type Fox struct {
Name string
}
//Woo ...
func (fox Fox) Woo() string {
return fox.Name + " wooooooo"
}
其中,型別和方法首字母都是大寫。
匯入自定義包
為了使用自定義包,必須要先匯入它。匯入自定義包的語法為
import path
指定自定義包相對於工作區內 src 資料夾的相對路徑。例如,animal包 匯入到 main 包 中
目錄結構
src
animal
dog.go
main.go
程式碼示例
package main
import (
"fmt"
"animal"
)
func main() {
fox := animal.Fox{"fox1"}
str := fox.Woo()
fmt.Println(str)
}
包初始化順序
init 函式
所有包都可以包含一個 init 函式。init 函式不應該有任何返回值型別和引數,在我們的程式碼中也不能顯式地呼叫它。init 函式的形式如下:
func init() {
}
init 函式可用於執行初始化任務,也可用於在開始執行之前驗證程式的正確性。
包的初始化順序如下:
首先初始化包級別(Package Level)的變數
緊接著呼叫 init 函式。包可以有多個 init 函式(在一個檔案或分佈於多個檔案中),它們按照編譯器解析它們的順序進行呼叫。
如果一個包匯入了另一個包,會先初始化被匯入的包。
儘管一個包可能會被匯入多次,但是它只會被初始化一次。
使用空白識別符號(Blank Identifier)
匯入了包,卻不在程式碼中使用它,這在 Go 中是非法的。當這麼做時,編譯器是會報錯的。其原因是為了避免匯入過多未使用的包,從而導致編譯時間顯著增加。然而,在程式開發的活躍階段,又常常會先匯入包,而暫不使用它。遇到這種情況就可以使用空白識別符號 _。
package main
import (
_ "geometry/rectangle"
)
func main() {
}