小编典典

包的类型不能用作供应商的包的类型

go

我正在尝试使用此Golang Yelp API软件包。在某些结构中,它使用guregu的null包中定义的类型。

我想声明一个在Yelp
API包中定义的结构,其中的某些字段null.Float作为值使用(即,该结构,我正在尝试使用)。因此,在我的程序中,我同时导入了Yelp
API包和guregu的null包,并尝试使用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

有想法该怎么解决这个吗?


阅读 451

收藏
2020-07-02

共1个答案

小编典典

这里的解决方案似乎是我正在尝试使用的库需要重新设计,以防止发生这种情况。

更改库的两种可能方法似乎是

1)完全没有供应商-如果依赖项不需要是特定版本,则可以使用。

2)供应商,但不要将供应商库公开。在库中创建一些包装函数,以便人们可以间接创建类型。

有关更多想法/原因,请参阅有关在reddit上出售商品的讨论。

2020-07-02