Go语言 包的类型不能用作供应的包的类型

isr3a4wc  于 2023-02-06  发布在  Go
关注(0)|答案(4)|浏览(255)

我尝试使用这个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
有什么想法如何解决这个问题?

s6fujrry

s6fujrry1#

这里的解决方案似乎是,我尝试使用的库需要重新工作,以防止这种事情发生。
更改库的两种可能方法是
1)根本不是供应商-如果依赖项不需要是特定版本,则此操作有效。
2)但不要公开供应的库。在库中创建一些 Package 函数,这样人们就可以间接地创建类型。
参见this discussion about vendoring on reddit for more ideas/reasons why.

wmtdaxz3

wmtdaxz32#

我也遇到了同样的问题。作为一种解决办法,我删除了相关软件包的供应商文件夹,并将其内容移动到我的$GOPATH文件夹中。
答案来源:promql Go import problem: use of vendored package not allowed

31moq8wy

31moq8wy3#

刚刚遇到了类似的问题。将两个库都放入/vendor已解决。使用govendor get xxxx

o4hqfura

o4hqfura4#

在使用Godep时遇到了类似的问题,我通过删除/vendor并重新运行godep save ./...解决了这个问题-希望它能有所帮助。

相关问题