2015-01-31 25 views
32

我不允許導入週期不準

這似乎與

導入週期的一個問題,當我想測試我的控制器。作爲輸出我有

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 

有人可以告訴我,如何閱讀或理解這個錯誤?依賴關係錯在哪裏?

+4

的'account'包進口'基'package,它導入'mux'包,它導入'account'包。這是一個週期性的進口依賴關係,這是不允許的。看起來你還有另一個循環,'base'導入'mux',它導入''routes',導入'base'。 – 2015-01-31 21:53:20

回答

59

下面是您的第一個導入週期問題的說明。

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

你可以用我的壞ASCII圖表看是要創建一個導入週期時project/components/mux進口project/controllers/account。由於Go不支持循環依賴,因此編譯期間會出現import cycle not allowed錯誤。

+10

你的ASCII圖很漂亮!查看這個應用程序 - > http://asciiflow.com/它可以讓你更快地創建ascii圖表 – 2017-05-25 11:59:22

6

我剛遇到這個。您可能正在使用包名稱本身從同一個包中訪問方法/類型。

下面是說明我的意思的例子:

在foo.go:

// foo.go 
package foo 

func Foo() {...} 

在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