去国防部供应商旧版本的依赖

时间:2019-02-09 21:49:53

标签: go dependencies

我已升级到go1.11,并且正在尝试使用go模块。我克隆了一个项目,然后运行go build,它创建了一个具有所有依赖项的go.modgo.sum文件。

现在,我想提供文件,以便运行命令go mod vendor

很遗憾,mod供应商会使用go-bindata的旧版本。我的项目无法建立,因为函数调用不存在。查看供应商go-bindata的源代码,我发现它与go-bindata项目的master分支中的源代码不同。

在我的go.mod文件中是这样的:

github.com/jteeuwen/go-bindata v3.0.7+incompatible

在我的go.sum文件中,是这样的:

github.com/jteeuwen/go-bindata v3.0.7+incompatible h1:91Uy4d9SYVr1kyTJ15wJsog+esAZZl7JmEfTkwmhJts=
github.com/jteeuwen/go-bindata v3.0.7+incompatible/go.mod h1:JVvhzYOiGBnFSYRyV00iY8q7/0PThjIYav1p9h5dmKs=

在GitHub上,go-bindata的最新标签是master分支上的v3.0.7。

关于go mod为什么引用较旧版本以及如何解决该问题的任何想法。在另一台计算机上,运行go get -u https://github.com/jteeuwen/go-bindata将获得最新的项目。为什么go mod不这样做?

编辑: 问题是go mod说它得到了v3.0.7,但是源代码与Github上当前带有3.0.7标签的内容不匹配。我本地拥有的内容看起来像v3.0.6,但被标记为v3.0.7。

在Github上的版本中,有一个看起来像这样的结构: link to source

type Config struct {
     //... some other fields
     NoMetadata bool
}

但是在我的本地供应商版本中,Config结构没有NoMetadata字段。 似乎go mod使用的是旧标记,并认为它使用的是最新标记。

1 个答案:

答案 0 :(得分:0)

该仓库的最新标签是v3.0.7,因此go mod可以帮助您。来自the FAQ

  

如果存储库尚未选择使用模块,但已被标记为   有效的semver标签(包括必需的前导v),然后是那些   可以在go get和相应的semver中使用semver标签   版本将记录在导入模块的go.mod文件中。

问题是您想要的代码不在3.0.7标记中,而是在master分支中吗?


查看更新中的特定NoMetadata字段,它是在2015年8月13日添加到https://github.com/jteeuwen/go-bindata/commit/7f4fb1184ff6bab28016ed674b61864665ba3d97中的。同时,v3.0.7于2014-11-20标记

因此,您感兴趣的更改似乎没有被标记,仅在master分支上。

鉴于这种情况,您可以分叉存储库-自2015年以来未对它进行过维护(并且README承认它没有得到维护)。或者找到一些最新的东西。或者说服维护者创建一个新标签。