1. 程式人生 > >go學習筆記-包處理

go學習筆記-包處理

包處理

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() {

}