2015-01-31 43 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