为了账号安全,请及时绑定邮箱和手机立即绑定

在本地使用带有 go mod 的子包

在本地使用带有 go mod 的子包

Go
慕标5832272 2023-05-08 17:49:58
我的文件系统上有一个$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 根目录。


查看完整回答
反对 回复 2023-05-08
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

对于另一种方法,您可以go.mod这样:

module awesome

然后像这样调用子包:

import "awesome/subpackageA"


查看完整回答
反对 回复 2023-05-08
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信