我尝试使用这个Golang Yelp API package,在它的一些结构体中,它使用了guregu's null package中定义的类型。
我想声明一个在Yelp API包中定义的struct,其中一些字段的值为null.Float
(即我试图使用的这个struct),所以在我的程序中,我导入了Yelp API包和guregu的null包,并试图声明这个struct,其中ip.lat和ip.lat为float64s(null.FloatFrom
定义):
33 locationOptions := yelp.LocationOptions{
34 ip.Zip,
35 &yelp.CoordinateOptions{
36 Latitude: null.FloatFrom(ip.Lat),
37 Longitude: null.FloatFrom(ip.Lon),
38 },
39 }
但当我运行程序时,它告诉我:
./cli.go:36: cannot use "github.com/guregu/null".FloatFrom(ip.Lat) (type
"github.com/guregu/null".Float) as type "github.com/JustinBeckwith/go-
yelp/yelp/vendor/github.com/guregu/null".Float in field value
我试了两件事:
1)我没有导入null
包,这导致Go语言抱怨null
未定义。2)我还尝试直接导入供应商包,这导致Go语言告诉我use of vendored package not allowed
。
有什么想法如何解决这个问题?
4条答案
按热度按时间s6fujrry1#
这里的解决方案似乎是,我尝试使用的库需要重新工作,以防止这种事情发生。
更改库的两种可能方法是
1)根本不是供应商-如果依赖项不需要是特定版本,则此操作有效。
2)但不要公开供应的库。在库中创建一些 Package 函数,这样人们就可以间接地创建类型。
参见this discussion about vendoring on reddit for more ideas/reasons why.
wmtdaxz32#
我也遇到了同样的问题。作为一种解决办法,我删除了相关软件包的供应商文件夹,并将其内容移动到我的$GOPATH文件夹中。
答案来源:promql Go import problem: use of vendored package not allowed
31moq8wy3#
刚刚遇到了类似的问题。将两个库都放入
/vendor
已解决。使用govendor get xxxx
o4hqfura4#
在使用Godep时遇到了类似的问题,我通过删除
/vendor
并重新运行godep save ./...
解决了这个问题-希望它能有所帮助。