Go中最困难的事情之一是版本控制,对于库的依赖关系有不同的处理方式,使用像 "Dream "这样的工具自动进行版本控制。 dep这样的工具,这是事实上最流行的工具,或者使用模块,这刚好是新的官方工作流程。
对于你所依赖的工具,例如用于生成代码(如 counterfeiter或 go-swagger)或铸币机(如 golangci-lint),事情就变得有点复杂了。当然,你可以黑掉你的PATH ,以指向不同的版本,并使用docker来包装这些命令和特定的版本;但这肯定是混乱的,从长远来看是不可持续的。
然而,假设你依赖的工具是用Go编写的,你肯定应该使用 retool.
补刀
retool 是一个用于销售具体的Go程序版本的工具,这些版本没有被你的代码导入。
安装
这是一个有点蛋疼的情况,这是因为到目前为止retool ,不支持Go模块,所以要安装它,你需要明确使用通常的技巧,假设你想安装v1.3.7 ,你会做如下的事情。
git clone git@github.com:twitchtv/retool.git $GOPATH/github.com/twitchtv/retool
cd $GOPATH/github.com/twitchtv/retool && git checkout tags/v1.3.7
go get github.com/twitchtv/retool
使用它
使用工具启用retool 的工作流程如下:假设我们想使用counterfeiter 版本v6.0.1 ,我们将做如下事情来添加这个版本的这个工具。
retool add github.com/maxbrunsfeld/counterfeiter v6.0.1
然后做类似于retool counterfeiter ,就可以调用这个销售的工具。如果我们打算使用一个分叉的工具,那么做下面这样的事情就可以了。
retool -f git@some.fork.com:something/go-counterfeiter \
add github.com/maxbrunsfeld/counterfeiter v6.0.1