這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
golang項目目錄結構
<golang_proj>
├─README
├─AUTHORS
├─<bin>
├─<pkg>
├─<src>
golang工程不需要任何的工程檔案,一個完整的工程通常會在項目根目錄下放置上面所示的檔案或目錄。它們的作用如下:
√ README : 簡單介紹本項目的目標和主要注意事項,通常第一次使用時應該先閱讀此文檔。
√ LICENSE : 本工程採用的分發協議,所有開源項目通常都擁有該文檔。
√ src : src目錄用於存放所有的原始碼。
√ pkg : pkg目錄用於存放編譯後的包檔案,無需手動建立。
√ bin : bin目錄用於存放編譯後的可執行檔,無需手動建立。
• src目錄
√ 目錄src用於包含所有的原始碼,是go tool一個強制的規則。
√ 構建過程中,go tool對包結構的理解完全依賴於src下面的目錄結構。
√ go get命令下載的第三方源碼將放置於GOPATH環境變數中第一個路徑之中。
以《golang之package》中提及的calc執行個體來說明的話,其目錄結構一開始如下:
<calcproj>
├─<src>
├─<calc>
├─calc.go
├─<simplemath>
├─add.go
├─add_test.go
├─sqrt.go
├─sqrt_test.go
├─<bin>
├─<pkg>
那麼在命令列中,我們在工程路徑下,使用go install simplemath命令對simplemath進行打包,可以在pkg目錄下找到simplemath.a檔案。
如果我們希望simplemath.a的路徑帶有一個命名空間,即在在使用時希望以import "myns/simplemath"這樣的方式匯入,那麼需要將目錄結構調整為如下形式:
<calcproj>
├─<src>
├─<calc>
├─calc.go
├─<simplemath>
├─<myns>
├─add.go
├─add_test.go
├─sqrt.go
├─sqrt_test.go
├─<bin>
├─<pkg>
那麼在命令列中,我們在工程路徑下,使用go install myns/simplemath命令對simplemath進行打包,可以在pkg目錄下找到simplemath.a檔案。
如果在命令列中,我們在工程路徑下,執行go install calc命令,那麼不僅可以在bin目錄下找到calc.exe可執行檔,還可以在pkg目錄下找到simplemath.a打包檔案。
• bin目錄
√ 目錄bin用於存放編譯後的可執行檔。
• pkg目錄
√ 目錄pkg用於存放編譯後的包檔案。
golang多重專案管理
• 方案一
該方案就是設定多個GOPATH路徑,即將多重專案工程的路徑都加入到GOPATH中,例如設定GOPATH為形如下面路徑:
D:\workspace\golang\calcproj;D:\workspace\golang\golearning;D:\workspace\golang\rpcclient;D:\workspace\golang\rpcserver
優點:項目目錄結構清晰,乾淨,每個工程下面只擁有自己相關的檔案。
缺點:使用類似go get的命令時,受影響的僅僅是GOPATH路徑下的第一個路徑,譬如使用go get取得第三方源碼時,取得的源碼只能下載到GOPATH路徑下的第一個路徑。
• 方案二
該方案就是始終設定一個GOPATH路徑,多重專案都放置在該路徑下的src目錄,並按照工程劃分目錄,例如設定GOPATH為形如下面路徑:
D:\workspace\golang
優點:GOPATH只需要設定一個目錄就可以管理多個工程,也不用煩惱第三方源碼存放位置。
缺點:這種目錄結構下工程檔案夾也是一個包名路徑,即內部工程檔案在import時候需要加上工程檔案夾名。以上述為例,protoc-gen-go在import其他包時候,需要加上基於src的相對路徑: