不允许导入循环

新手上路,请多包涵

我有问题

不允许导入循环

它在我尝试测试我的控制器时出现。这是输出:

 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

我如何阅读或理解此错误?依赖哪里错了?

原文由 softshipper 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 737
2 个回答

这是您的第一个导入周期问题的说明。

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



正如您在我的错误 ASCII 图表中看到的那样,当 project/components/mux 导入 project/controllers/account 时,您正在创建一个导入周期。由于 Go 不支持循环依赖,您在编译时会遇到 import cycle not allowed 错误。

原文由 jmaloney 发布,翻译遵循 CC BY-SA 4.0 许可协议

我刚遇到这个。您可能正在使用包名称本身从同一包中访问方法/类型。

这是一个例子来说明我的意思:

在 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

此答案 显示了循环依赖的另一个常见原因。

与 JavaScript 不同,Go 对循环依赖的容忍度较低,这既是好事也是坏事。

原文由 Jonathan Lin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题