web-dev-qa-db-fra.com

le type du paquet ne peut pas être utilisé comme type du paquet vendu

J'essaie d'utiliser ceci paquet API Golang Yelp . Dans certaines de ses structures, il utilise les types définis dans le package null de guregu .

Je souhaite déclarer une structure définie dans le package de l'API Yelp, dans laquelle certains de ses champs ont pour valeur null.Float ( c.-à-d. Cette structure, que j'essaie d'utiliser ). Donc, dans mon programme, j'importe à la fois le paquet API de Yelp et le paquet nul de guregu et essaie de déclarer la structure, avec ip.Lat et ip.Lat étant des 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         }

Mais quand je lance le programme, il me dit:

./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

J'ai essayé 2 choses: 

1) Je n’ai pas importé le package null, ce qui a amené Go à se plaindre de ce que null était indéfini. 2) J'ai aussi essayé d'importer directement le paquet vendored, ce qui a provoqué la réaction de Go to tell use of vendored package not allowed.

Des idées pour résoudre le problème?

22
Julien Chien

La solution ici semble être que la bibliothèque que j'essaie d'utiliser doit être retravaillée pour éviter ce genre de chose.

Les deux manières possibles de changer de bibliothèque semblent être 

1) pas du tout vendeur - cela fonctionne si la dépendance n'a pas besoin d'être une version spécifique.

2) vendored, mais n'exposez pas la bibliothèque vendored au public. Créez des fonctions wrapper dans la bibliothèque afin que les utilisateurs puissent créer les types indirectement.

Voir cette discussion sur la vente sur reddit pour plus d’idées/raisons.

10
Julien Chien

J'ai eu le même problème. Pour contourner le problème, j'ai supprimé le dossier du fournisseur du package associé et déplacé leur contenu dans mon dossier $ GOPATH.

Source de réponse: https://github.com/prometheus/prometheus/issues/1720

6
Randy Yuan

Je viens d'avoir un problème similaire. Mettre les deux bibliothèques dans /vendor résolu. Utiliser govendor get xxxx

2
Viktor Yarmak

Nous avons eu un problème similaire lors de l’utilisation de Godep et j’ai résolu le problème en supprimant /vendor et en le relançant godep save ./... - J'espère que cela aide.