版本选择算法

    例如,如果您的模块依赖于具有require D v1.0.0的模块A,并且您的模块还依赖于具有require D v1.1.1的模块B,则最小版本选择将会选择D的v1.1.1版本用以构建(使用最高版本)。

    私有依赖管理

    如果你可以通过go.mod完美地管理当前的项目包依赖,那么可以忽略该章节。如果你在处理项目的包依赖管理中遇到了问题,那么建议你继续阅读该章节,可以找到解决问题的灵感。

    1. 虽然GF足够强大,但多数时候依赖的包不仅仅是GF,还包括一些额外的第三方包,特别是的包,需要自带梯子翻墙下载,即使本地方便处理,但是在自动部署系统上可能会稍麻烦;
    2. 等等;

    如果你遇到了上面所提到的问题,我们建议的解决方案如下:

    1. 充分利用go.modvendor的优点,结合两者进行依赖包管理;
    2. 开发环境提交部署之前使用命令,将该项目依赖的第三方包自动复制到vendor目录下,并提交vendor目录代码;
    3. 在自动部署系统上(如jenkins)使用go build -mod=vendor命令优先使用vendor目录进行编译,生成二进制文件,例如编译生成Linux下的可部署二进制文件:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -mod=vendor -o main main.go