2015-01-31 15 views
32

Ho un problema conciclo di importazione non ammessi

ciclo di importazione non ammessi

Appare, quando sto cercando di testare il mio controller. Come output ho

can't load package: import cycle not allowed 
package project/controllers/account 
    imports project/controllers/base 
    imports project/components/mux 
    imports project/controllers/account 
import cycle not allowed 
package project/controllers/account 
    imports project/controllers/base 
    imports project/components/mux 
    imports project/controllers/account 
import cycle not allowed 
package project/controllers/account 
    imports project/controllers/base 
    imports project/components/mux 
    imports project/controllers/routes 
    imports project/controllers/base 

Qualcuno può dirmi, come leggere o capire questo errore? Dov'è la dipendenza sbagliata?

+4

Il account' pacchetto '' base importa 'pacchetto, che importa il pacchetto' mux', che importa il pacchetto 'account'. Questo è un insieme ciclico di dipendenze di importazione, che non è consentito. Sembra che abbiate anche un altro ciclo, 'base' importa' mux', che importa 'routes', che importa' base'. –

risposta

59

Questa è un'illustrazione del primo problema del ciclo di importazione.

    project/controllers/account 
        ^     \  
        /     \ 
       /      \ 
       /      \/ 
     project/components/mux <--- project/controllers/base 

Come si può vedere con la mia tabella ASCII cattiva è che si sta creando un ciclo di importazione quando project/components/mux importazioni project/controllers/account. Poiché Go non supporta le dipendenze circolari, si verifica l'errore import cycle not allowed durante la compilazione.

+10

il tuo grafico ASCII è bellissimo! Controlla questa app -> http://asciiflow.com/ ti consente di creare grafici ascii un po 'più velocemente –

6

Ho appena incontrato questo. Potresti accedere a un metodo/tipo dallo stesso pacchetto usando il nome del pacchetto stesso.

Ecco un esempio per illustrare cosa intendo:

In foo.go:

// foo.go 
package foo 

func Foo() {...} 

In foo_test.go:

// foo_test.go 
package foo 

// try to access Foo() 
foo.Foo() // WRONG <== This was the issue. You are already in package foo, there is no need to use foo.Foo() to access Foo() 
Foo() // CORRECT 
Problemi correlati