2015-04-27 8 views
10

Ho riscontrato un problema nel tentativo di importare un tipo da un altro pacchetto e file. La struttura che sto cercando di importare è quella sotto.Importazione di struct da un altro pacchetto e file golang

type PriorityQueue []*Item 

type Item struct { 
    value string 
    priority int 
    index int 
} 

Se avrei messo la CodaConPriorita a fianco con tutti i suoi metodi nello stesso file che avevo dichiaro con

pq:= &PriorityQueue{} 

Ho cercato in internet come un pazzo per una risposta su questa semplice domanda, ma non ho trovato una risposta. Di solito programma in Java e le classi di importazione sono così elementari.

+0

Perché non dovresti semplicemente copiare la struttura nel pacchetto? – smartDonkey

+0

Oppure importa il pacchetto? – smartDonkey

+1

Qualificati. 'pq: = & mypkg.PriorityQueue {}'. –

risposta

26

In Go non si importano tipi o funzioni, si importa packages (vedere Spec: Import declarations).

Un esempio di dichiarazione di importazione:

import "container/list" 

E importando un pacchetto è possibile accedere a tutta la sua esportato identificatori e si può fare riferimento a loro come packagename.Identifiername, ad esempio:

var mylist *list.List = list.New() 

// Or simply: 
l := list.New() 

Esistono alcuni trucchi nella dichiarazione di importazione, ad esempio:

import m "container/list" 

È possibile fare riferimento agli identificatori esportati con "m.Identifiername", ad es.

l := m.New() 

anche facendo:

import . "container/list" 

Puoi lasciare fuori il nome del pacchetto completamente:

l := New() 

Ma usare solo questi "in emergenza" o quando ci sono conflitti di nomi (che sono rari).

+0

Ho anche commesso l'errore di creare un nuovo progetto al di fuori di GOPATH. Il fallimento delle importazioni locali potrebbe essere il primo segnale che ciò è stato fatto. – Shadoninja