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

有没有更简单的方法来保持本地 Go 包更新

有没有更简单的方法来保持本地 Go 包更新

Go
慕无忌1623718 2023-07-10 16:35:37
我正在使用导入到不同项目中的多个包,这些包包括用于我的业务逻辑的自定义适配器,这些适配器由 lambda 和谷歌云函数以及其他公共包共享。我现在这样做的方法是供应它们并将它们包含在云功能中。对于可以在VM上编译和部署的应用程序,我单独编译它们。这对我来说效果很好,但是,开发这些模块很痛苦。如果我更新包中的方法签名和名称,我必须将更改推送到 github / gitlab (我的包路径类似于 gitlab.com/groupName/projectName/pkg/packageName),然后执行 a 来更新包go get -u <pacakgeName>。这也并没有真正更新它,有时我会坚持使用旧版本,不知道如何更新它。我想知道是否有更简单的方法来处理这个问题。为了清楚起见:导出的包1路径:gitlab.com/some/name/group/pkg/clients/psqlpsql-client    |    |_ pkg        |        |_psql.go应用程序1使用psql-client 路径:gitlab.com/some/name/app1应用程序2使用psql-client 路径:gitlab.com/some/name/app2
查看完整描述

2 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

我的理解是(a)您正在使用新的 Go 模块系统,(b)问题的一部分是您在进行本地开发时不希望在不同的存储库中不断将更改推送到 github 或 gitlab。

换句话说,如果您在本地进行了更改,那么听起来您不想通过 github/gitlab 往返这些更改,以便这些更改在您正在本地处理的相关存储库中可见。

最重要的建议

在单个存储库中包含 > 1 个模块会使您的工作流程变得非常复杂。

正如您的示例所示,一般来说,在单个存储库中拥有 > 1 个模块几乎总是需要持续进行更多工作。这也很难做到正确。对于大多数人来说,这种成本几乎总是不值得的。此外,通常带来的好处并不是人们所期望的,或者在某些情况下,在存储库中拥有 > 1 个模块没有实际好处。

我绝对建议您遵循“1 repo == 1 module”这一普遍遵循的规则,至少现在是这样。

使用多个存储库

鉴于您正在使用 Go 模块,一种方法是您可以replace向模块go.mod文件添加一条指令,通知该 Go 模块其他 Go 模块在磁盘上的位置。

结构示例

例如,如果您有三个存储库repo1repo2repo3,您可以克隆它们,以便它们在本地磁盘上彼此相邻:

myproject/
├── repo1
├── repo2
└── repo3

然后,如果repo1依赖于repo2repo3,您可以设置go.mod文件 来repo1了解其他两个模块在磁盘上的相对位置:

repo1 go.mod

replace github.com/me/repo2 => ../repo2
replace github.com/me/repo3 => ../repo3

当您位于repo1目录或其任何子目录中时,go类似go build或 的命令将使用和 的go test ./....磁盘版本。repo2repo3

repo2 go.mod

如果repo2取决于repo3,您还可以设置:

replace github.com/me/repo3 => ../repo3

repo3 go.mod

例如,如果repo3不依赖于 或repo1repo2那么您不需要将 a 添加replace到其go.mod

额外细节

模块 wiki 上的替换常见问题replace解答中更详细地介绍了该指令。

最后,这取决于您的具体用例,但此时的常见解决方案是使用gohack,它可以自动执行部分过程。特别是,它创建依赖项的可变副本(默认在 中$HOME/gohack,但位置由$GOHACK变量控制)。gohack还设置当前go.mod文件有一个替换指令来指向该可变副本。


查看完整回答
反对 回复 2023-07-10
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

go get是可传递的,因此您可以将其添加到构建过程中。典型的 Go 项目构建基本上是:

go get -u ./... && go test ./... && go build ./cmd/myapp

它获取并更新依赖项,运行所有项目测试,然后构建二进制文件。


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

添加回答

举报

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