我的文件系統上有一個$GOPATH名為bitbucket.org/me/awesome.~/awesome> tree.├── main.go├── go.mod├── go.sum├── subpackageA│ └── main.go我的go.mod樣子:module bitbucket.org/me/awesomerequire ( ... # lots of external dependencies)replace bitbucket.org/me/awesome => ./在main.go我的頂級目錄中,我調用了一個子包,如下所示:import "bitbucket.org/me/awesome/subpackageA"這一切看起來都很正常。go get作品。但是,當我將整個存儲庫克隆到其他地方(比如在 Docker 映像中)并go get首次運行時,我會收到如下錯誤:package bitbucket.org/me/awesome/subpackageA: https://api.bitbucket.org/2.0/repositories/me/awesome?fields=scm: 403 Forbidden,這意味著它沒有使用包的本地文件系統版本,即使我告訴它使用文件中的replace指令go.mod。我究竟做錯了什么?我如何確保子包是從文件系統中使用的,而不是試圖從互聯網上獲取的?
2 回答

拉丁的傳說
TA貢獻1789條經驗 獲得超8個贊
Go 沒有(真正的)“子包”概念。所有包裹基本上都是平等對待的。這意味著 areplace bitbucket.org/me/awesome
不會影響包bitbucket.org/me/awesome/subpackageA
,因為它們是兩個獨立的、不相關的包。文件夾布局不會引入 subpackageA 與 awsome 的關系,反之亦然 *)。
所以你需要為 subpackageA 添加一個單獨的替換指令
replace bitbucket.org/me/awesome/subpackageA => ./subpackageA
*) 挑剔絕對正確性:文件夾布局確實影響命名文件夾internal
(不能從其他項目導入),命名文件夾vendor
(可能包含銷售包)和搜索go.mod
文件停止在 repo 根目錄。

慕蓋茨4494581
TA貢獻1850條經驗 獲得超11個贊
對于另一種方法,您可以go.mod
這樣:
module?awesome
然后像這樣調用子包:
import?"awesome/subpackageA"
- 2 回答
- 0 關注
- 188 瀏覽
添加回答
舉報
0/150
提交
取消