go - 包的类型不能用作 vendor 包的类型

标签 go struct

我正在尝试使用这个 Golang Yelp API package .在它的一些结构中,它使用 guregu's null package 中定义的类型。 .

我想声明一个在 Yelp API 包中定义的结构,它的一些字段有 null.Float作为一个值( i.e. this struct, which im trying to use )。所以在我的程序中,我同时导入了 Yelp API 包和 guregu 的 null 包,并尝试声明结构,ip.Lat 和 ip.Lat 是 float64s。 ( null.FloatFrom definition) :

 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)我也试过直接导入vendored包,导致Go告诉我use of vendored package not allowed .

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

最佳答案

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

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

1) 根本不是 vendor - 如果依赖项不需要是特定版本,则此方法有效。

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

this discussion about vendoring on reddit for more ideas/reasons why.

关于go - 包的类型不能用作 vendor 包的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64041672/

相关文章:

c - C中结构体的动态内存分配

c - C 中结构的 malloc(从 C++ 移植)

C++:我什么时候应该使用结构而不是类,速度差异在哪里?

c - "expected specifier-qualifier-list before ‘*’ token “可变参数函数中的错误

ios - Swift:setObject 是 Parse 上的结构数组

unit-testing - 导出 Golang 包进行测试?

json - 在 golang 中动态地从 JSON 中删除 key

go - 注意包含结构的队列中的更改

url - 如何从 golang 中的确切 url 重定向?

http - 如何使用中间件惯用地记录身份验证信息