我已經開始學習go (1.7.4) 并且有一個當前生成兩個可執行文件的項目。我有一個目錄結構,如下所示,遵循標準的 go 布局:GOPATH=`pwd`binsrc/src/<project1>src/<project1>/vendorsrc/<project1>/glide.yamlsrc/<project2>src/<project2>/vendorsrc/<project2>/glide.yamlpkg/項目 1 和項目 2 共享很多依賴項。 有沒有辦法在 project1 和 project2 之間共享供應商目錄并仍然固定版本以確??芍噩F的構建?我不想為每個項目復制 glide.yaml 和 vendor 目錄,因為它會使構建膨脹并違反 DRY。pkg 目錄是執行此操作的明顯方法,但與供應商不同,我沒有像 glide 這樣的依賴管理器工具來確保使用特定版本(另請參閱我的相關問題)。一個可能相關的問題是這個項目是如何組織的。我相信去將每個項目子目錄映射到單個 github 存儲庫會更常規。但是,對于我的項目,我想構建至少兩個可執行文件。我知道你可以通過使用不同的包名稱來做到這一點,但它會混淆 go 和 glide。我努力使它在單個項目下工作,并決定/發現使用標準的 go 布局并在兩個層次上工作更容易。例如,一個優點是子目錄中的“go build”等無需命名包即可工作。我還可以讓我在頂層的構建、測試和打包機制在所有項目上運行,并將我的 go 環境與其他任何環境分開。這些程序不夠復雜,無法保證單獨的 git 存儲庫(即使作為子模塊)。
2 回答

開滿天機
TA貢獻1786條經驗 獲得超13個贊
應該可以有一個共享的供應商目錄。我這樣做的方式涉及 Go 1.11 和稱為模塊的新 Go 功能。但我很確定它應該與供應商和工具一起工作,比如 glide 和 dep。要使用 dep/glide,你的目錄結構可能看起來像這樣
- src - projects - project1 - project2 - vendor - Glide.yaml
您可以使用項目文件夾go build -o p1 project1/*.go
或使用單個項目文件夾構建它go build
相同的結構,但在 GOPATH 之外將適用于 Go 1.11 模塊。您必須將 GO111MODULE 變量設置為“on”或“auto”。請注意,go modules 將依賴項存儲在其他位置,并在需要時在構建過程中自動下載它們。
注:glide github page 推薦切換到dep作為更官方的工具
編輯:剛剛用 dep 測試了它。這個對我有用。

aluckdog
TA貢獻1847條經驗 獲得超7個贊
它允許您修復所用包的版本:
module github.com/my/thing
require (
? ? github.com/some/dependency v1.2.3
? ? github.com/another/dependency/v4 v4.0.0
)
- 2 回答
- 0 關注
- 136 瀏覽
添加回答
舉報
0/150
提交
取消