Тип пакета не может использоваться в качестве типа пакета поставщика

Я пытаюсь использовать этот пакет Golang Yelp API. В некоторых своих структурах он использует типы, определенные в пакет guregu null.

Я хочу объявить структуру, определенную в пакете API Yelp, где некоторые из его полей имеют null.Float как значение (т.е. эта структура, которая im пытаясь использовать). Поэтому в моей программе я импортирую как пакет API Yelp, так и нулевой пакет guregu и пытаюсь объявить структуру, причем ip.Lat и ip.Lat являются float64. (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

Я пробовал 2 вещи:

1) Я не импортировал пакет null, из-за которого Go жаловался на null на undefined. 2) Я также попытался импортировать пакет, который был отправлен напрямую, что привело к тому, что я сказал мне use of vendored package not allowed.

Любые идеи о том, как это исправить?

Ответ 1

Решение здесь, кажется, состоит в том, что библиотека, которую я пытаюсь использовать, должна быть переработана, чтобы предотвратить подобные вещи.

Два возможных способа изменить библиотеку:

1) вообще не поставщик - это работает, если зависимость не должна быть конкретной версией.

2) вендор, но не выставляйте вендорную библиотеку на всеобщее обозрение. Создайте некоторые функции-оболочки в библиотеке, чтобы люди могли создавать типы косвенно.

Смотрите это обсуждение о продаже на Reddit для большего количества идей/причин, почему.

Ответ 2

Я была такая же проблема. В качестве обходного пути я удалил соответствующую папку поставщика пакетов и переместил их содержимое в свою папку $ GOPATH.

Источник ответа: https://github.com/prometheus/prometheus/issues/1720

Ответ 3

Просто была похожая проблема. Помещение обеих библиотек в /vendor решено. Используя govendor get xxxx

Ответ 4

У меня была похожая проблема при использовании Godep, и я решил, удалив /vendor и повторно запустив godep save./... - Надеюсь, это поможет.