Тип пакета не может использоваться в качестве типа пакета поставщика
Я пытаюсь использовать этот пакет 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./...
- Надеюсь, это поможет.