2016-06-29 50 views
9

Sto tentando di utilizzare questo Golang Yelp API package. In alcune delle sue strutture, utilizza i tipi definiti in guregu's null package.non può essere utilizzato come tipo del pacchetto venduto

Desidero dichiarare una struct definita nel pacchetto dell'API di Yelp, dove alcuni dei suoi campi hanno il valore null.Float (i.e. this struct, which im trying to use). Quindi nel mio programma, importare sia il pacchetto API di Yelp sia il pacchetto nullo di guregu e provare a dichiarare la struct, con ip.Lat e ip.Lat essendo 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   } 

Ma quando ho eseguito il programma, mi dice:

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

ho provato 2 cose:

1) non ho importare il pacchetto null, che ha causato Vai lamentarsi di null non definito. 2) Ho anche provato a importare direttamente il pacchetto venduto, che ha causato a Go di dirmi use of vendored package not allowed.

Qualsiasi idea su come risolvere questo problema?

risposta

4

La soluzione qui sembra essere che la libreria che sto cercando di utilizzare deve essere rielaborata per evitare che questo tipo di cose accada.

I due possibili modi per cambiare la libreria sembrano essere

1) Non vendor a tutti - questo funziona se la dipendenza non ha bisogno di essere una versione specifica.

2) Venduto, ma non esporre la libreria venduta al pubblico. Creare alcune funzioni wrapper nella libreria in modo che le persone possano creare i tipi indirettamente.

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