我已升级到go1.11,并且正在尝试使用go模块。我克隆了一个项目,然后运行go build
,它创建了一个具有所有依赖项的go.mod
和go.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
使用的是旧标记,并认为它使用的是最新标记。
答案 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承认它没有得到维护)。或者找到一些最新的东西。或者说服维护者创建一个新标签。