2015-01-31 6 views
32

erlaubte Ich habe ein Problem mitImport Zyklus nicht

Import Zyklus nicht erlaubt

Es scheint, wenn ich versuche, meinen Controller zu testen. Als Ausgabe habe ich

habe mir
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 

Kann jemand sagen, wie man diese Fehler lesen oder zu verstehen? Wo ist die Abhängigkeit falsch?

+4

Das 'account' Paket importiert die' base 'Paket, das das Paket' mux' importiert, das das Paket 'account' importiert. Das ist eine zyklische Menge von Importabhängigkeiten, die nicht erlaubt ist. Es sieht so aus, als hättest du auch einen anderen Zyklus, "base" importiert 'mux', der' routes' importiert, der 'base' importiert. –

Antwort

59

Hier ist eine Abbildung Ihres ersten Importzyklusproblems.

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

Wie Sie mit meinem schlechten ASCII-Chart sehen kann, ist, dass Sie einen Importzyklus, wenn project/components/mux Importe project/controllers/account schaffen. Da Go keine zirkulären Abhängigkeiten unterstützt, erhalten Sie den Fehler import cycle not allowed während der Kompilierzeit.

+10

Ihr ASCII-Diagramm ist schön! Sieh dir diese App an -> http://asciiflow.com/ lässt du Ascii Charts etwas schneller erstellen –

6

Ich bin gerade dies begegnet. Sie greifen möglicherweise auf eine Methode/einen Typ innerhalb desselben Pakets zu, indem Sie den Paketnamen selbst verwenden. Hier

ist ein Beispiel zu veranschaulichen, was ich meine:

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