首頁  >  文章  >  後端開發  >  Go語言中什麼是包

Go語言中什麼是包

青灯夜游
青灯夜游原創
2023-01-11 10:19:091509瀏覽

套件(package)是多個Go原始碼的集合,是一種高階的程式碼重複使用方案。 Go語言的套件借助了目錄樹的組織形式,一般套件的名稱就是其原始檔案所在目錄的名稱;套件可以定義在很深的目錄中,套件名稱的定義是不包括目錄路徑的,但是套件在引用時一般使用全路徑引用。

Go語言中什麼是包

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

Go語言是使用套件來組織原始碼的,套件(package)是多個 Go 原始碼的集合,是一種高階的程式碼多用方案。 Go語言中為我們提供了許多內建包,如 fmt、os、io 等。

Golang 中的套件與資料夾是一一對應的,必須在 GOPATH 目錄下建立才能使用。 Golang 中的一個套件需要引用另一個套件的內容,那麼就必須在開始使用 import 關鍵字進行匯入才可以使用。

任何原始碼檔案必須屬於某個套件,同時原始碼檔案的第一行有效程式碼必須是package pacakgeName 語句,透過該語句宣告自己所在的程式。

套件的基本概念

Go語言的套件借助了目錄樹的組織形式,一般套件的名稱就是其原始檔案所在目錄的名稱,雖然Go語言沒有強制要求包名必須和其所在的目錄名同名,但還是建議包名和所在目錄同名,這樣結構更清晰。

套件可以定義在很深的目錄中,套件名稱的定義是不包含目錄路徑的,但是套件在引用時一般使用全路徑引用。例如在GOPATH/src/a/b/ 下定義一個套件 c。在套件c 的原始碼中只需宣告為package c,而不是宣告為package a/b/c,但在導入c 套件時,需要帶上路徑,例如 import "a/b/c"

套件的習慣用法:

  • 套件名稱一般是小寫的,使用一個簡短且有意義的名稱。

  • 套件名稱一般要和所在的目錄同名,也可以不同,套件名稱中不能包含- 等特殊符號。

  • 套件一般會使用網域名稱作為目錄名稱,這樣可以保證套件名稱的唯一性,例如GitHub 專案的套件一般會放到GOPATH/src/github.com/userName /projectName 目錄下。

  • 套件名為 main 的套件為應用程式的入口包,編譯不包含 main 套件的源碼檔案時不會得到可執行檔。

  • 一個資料夾下的所有原始碼檔案只能屬於同一個包,同樣屬於同一個包的源碼檔案不能放在多個資料夾下。

套件的導入

#要引用程式碼中其他套件的內容,需要使用import 關鍵字導入使用的包。具體語法如下:

import "包的路径"

注意事項:

  • import 導入語句通常放在原始碼檔案開頭包宣告語句的下面;

  • 匯入的套件名稱需要使用雙引號包裹起來;

  • 套件名稱是從GOPATH/src/ 後開始計算的,使用/ 進行路徑分隔。

套件的導入路徑

#套件的參考路徑有兩種寫法,分別是全路徑導入和相對路徑導入。

全路徑導入

套件的絕對路徑就是GOROOT/src/或GOPATH/src/後麵包的存放路徑,如下所示:

import "lab/test"
import "database/sql/driver"
import "database/sql"

上面程式碼的意思如下:

  • test 套件是自訂的套件,其原始碼位於GOPATH/src/lab/test 目錄下;

  • driver 套件的原始碼位於GOROOT/src/database/sql/driver 目錄下;

  • sql 套件的源碼位於GOROOT/src/database/sql 目錄下。

相對路徑導入

相對路徑只能用於導入GOPATH 下的包,標準包的導入只能使用全路徑導入。

例如包a 的所在路徑是GOPATH/src/lab/a,包b 的所在路徑為GOPATH/src/lab/b,如果在包b 中導入包a ,則可以使用相對路徑導入方式。範例如下:

// 相对路径导入
import "../a"

當然了,也可以使用上面的全路徑導入,如下所示:

// 全路径导入
import "lab/a"

套件載入

透過前面一系列的學習相信大家已經大致了解了Go 程式的啟動與載入過程,在執行main 套件的mian 函數之前, Go 引導程式會先對整個程式的套件進行初始化。整個執行的流程如下圖所示。

Go語言中什麼是包
圖:Go 套件的初始化

Go語言套件的初始化有以下特點:

  • 套件初始化程序從 main 函數引用的套件開始,逐級查找包的引用,直到找到沒有引用其他包的包,最終產生一個包引用的有向無環圖。

  • Go 編譯器會將有向無環圖轉換為一棵樹,然後從樹的葉子節點開始逐層​​向上對套件進行初始化。

  • 單一套件的初始化過程如上圖所示,先初始化常數,然後是全域變量,最後執行套件的 init 函數。

Golang套件使用總結

#Go 語言的原始碼組織使用的是套件的形式。 Go 語言的 main 函數只有在 main 套件裡面才可以被系統執行。

【相關推薦:Go影片教學程式設計教學

以上是Go語言中什麼是包的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn