包的类型不能用作出售包的类型

Jul*_*ien 27 struct 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         }
Run Code Online (Sandbox Code Playgroud)

但是当我运行该程序时,它告诉我:

./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
Run Code Online (Sandbox Code Playgroud)

我尝试了两件事:

1)我没有导入null包,导致Go抱怨null未定义.2)我也尝试直接导入销售包,这导致Go告诉我use of vendored package not allowed.

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

Jul*_*ien 12

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

改变库的两种可能方式似乎是

1)根本不是供应商 - 如果依赖关系不需要是特定版本,这是有效的.

2)出售,但不要向公众展示出售的图书馆.在库中创建一些包装函数,以便人们可以间接创建类型.

有关更多想法/原因的原因,请参阅有关在reddit上进行vendoring的讨论.


小智 9

我遇到过同样的问题.作为一种解决方法,我删除了相关包的供应商文件夹,并将其内容移至我的$ GOPATH文件夹.

答案来源:https://github.com/prometheus/prometheus/issues/1720