Go Tip:迁移到模块的记录

75 阅读2分钟

一直以来,我们都在使用并推荐使用depretool这两个工具来分别管理依赖关系、软件包和工具。然而,随着Go Modules正式引入,不幸的是,这两个工具立即被废弃了。

具体来说,我们依赖以下Go工具来生成我们的代码,测试它,对它进行刷新并发布它。

值得庆幸的是,所有这些项目都已经被迁移到Go模块中,所以依赖它们真的很容易。我遵循了推荐的tools.go 范式,并表示是最近的版本,我们没有任何问题。

关于我们的内部私有包,我们必须做的一件重要的事情是使用git config ,以确保go get 在克隆仓库时使用SSH而不是https ,类似下面的内容应该足够了。

git config --global url."git@gitlab.private:".insteadOf "https://gitlab.private/"

除此之外,由于我们使用的是自营的 Gitlab和Gitlab CI实例,而且我们的项目结构是这样的。<project name>/<team>/<service>,我们不得不明确使用go 1.13.3,因为有子项目是个问题。我们需要做的另一件重要的事情是在go.mod 中定义一个replace 指令,明确表示使用.git 黑客的存储库,类似于下面的内容。

require (
	private.gitlab.instance/project/team/service-name v1.0.0
)

replace (
	private.gitlab.instance/project/team/service-name => private.gitlab.instance/project/team/service-name.git v1.0.0
)

最后,我们引入了 direnv到我们的工作流程中,这样当我们安装我们的工具时,这些工具是与我们正在工作的项目相对应的,一个简单的.envrc ,内容如下即可。

PATH_add bin
export GOBIN=$PWD/bin

1.13.3之后,迁移到Go模块是一个简单的过程。