Go語言工程結構詳述
一般的程式語言往往對工程(專案)的目錄結構是沒有什麼規定的,但是Go語言卻在這方面做了相關規定,本節我們就來聊聊Go語言在工程結構方面的有關知識。
我們前面講搭建Go語言開發環境時提到的環境變數 GOPATH,專案的構建主要是靠它來實現的。這麼說吧,如果想要構建一個專案,就需要將這個專案的目錄新增到 GOPATH 中,多個專案之間可以使用;分隔。
如果不配置 GOPATH,即使處於同一目錄,程式碼之間也無法通過絕對路徑相互呼叫。
目錄結構
一個Go語言專案的目錄一般包含以下三個子目錄:
src 目錄:放置專案和庫的原始檔;
pkg 目錄:放置編譯後生成的包/庫的歸檔檔案;
bin 目錄:放置編譯後生成的可執行檔案。
三個目錄中我們需要重點關注的是 src 目錄,其他兩個目錄瞭解即可,下面來分別介紹一下這三個目錄。
src 目錄
用於以包(package)的形式組織並存放 Go 原始檔,這裡的包與 src 下的每個子目錄是一一對應。例如,若一個原始檔被宣告屬於 log 包,那麼它就應當儲存在 src/log 目錄中。
並不是說 src 目錄下不能存放 Go 原始檔,一般在測試或演示的時候也可以把 Go 原始檔直接放在 src 目錄下,但是這麼做的話就只能宣告該原始檔屬於 main 包了。正常開發中還是建議大家把 Go 原始檔放入特定的目錄中。
包是Go語言管理程式碼的重要機制,其作用類似於Java中的 package 和 C/C++ 的標頭檔案。Go 原始檔中第一段有效程式碼必須是package <包名> 的形式,如 package hello。
另外需要注意的是,Go語言會把通過go get 命令獲取到的庫原始檔下載到 src 目錄下對應的資料夾當中。
pkg 目錄
用於存放通過go install 命令安裝某個包後的歸檔檔案。歸檔檔案是指那些名稱以“.a”結尾的檔案。
該目錄與 GOROOT 目錄(也就是Go語言的安裝目錄)下的 pkg 目錄功能類似,區別在於這裡的 pkg 目錄專門用來存放專案程式碼的歸檔檔案。
編譯和安裝專案程式碼的過程一般會以程式碼包為單位進行,比如 log 包被編譯安裝後,將生成一個名為 log.a 的歸檔檔案,並存放在當前專案的 pkg 目錄下。
bin 目錄
與 pkg 目錄類似,在通過go install 命令完成安裝後,儲存由 Go 命令原始檔生成的可執行檔案。在類 Unix 作業系統下,這個可執行檔案的名稱與命令原始檔的檔名相同。而在 Windows 作業系統下,這個可執行檔案的名稱則是命令原始檔的檔名加 .exe 字尾。
原始檔
上面我們提到了命令原始檔和庫原始檔,它們到底是什麼呢?
命令原始檔:如果一個 Go 原始檔被宣告屬於 main 包,並且該檔案中包含 main 函式,則它就是命令原始碼檔案。命令原始檔屬於程式的入口,可以通過Go語言的go run 命令執行或者通過go build 命令生成可執行檔案。
庫原始檔:庫原始檔則是指存在於某個包中的普通原始檔,並且庫原始檔中不包含 main 函式。
不管是命令原始檔還是庫原始檔,在同一個目錄下的所有原始檔,其所屬包的名稱必須一致的。