Chu kỳ nhập khẩu không được phép


135

Tôi có vấn đề với

chu kỳ nhập khẩu không được phép

Nó xuất hiện, khi tôi đang cố kiểm tra bộ điều khiển của mình. Như đầu ra tôi đã có

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

Ai đó có thể cho tôi biết, làm thế nào để đọc hoặc hiểu lỗi này? Phụ thuộc sai ở đâu?


13
Các accountgói nhập khẩu các basegói, trong đó nhập khẩu các muxgói, trong đó nhập khẩu các accountgói. Đó là một tập hợp phụ thuộc nhập khẩu theo chu kỳ, không được phép. Có vẻ như bạn cũng có một chu kỳ khác, basenhập khẩu mux, nhập khẩu routes, nhập khẩu base.
Amit Kumar Gupta

Câu trả lời:


169

Dưới đây là một minh họa về vấn đề chu kỳ nhập khẩu đầu tiên của bạn.

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

Như bạn có thể thấy với biểu đồ ASCII xấu của tôi là bạn đang tạo chu kỳ nhập khi project/components/muxnhập project/controllers/account. Vì Go không hỗ trợ các phụ thuộc vòng tròn, bạn sẽ import cycle not allowedgặp lỗi trong thời gian biên dịch.


9
Vì vậy, điều này chỉ xuất hiện trên biên dịch. Đã lãng phí rất nhiều thời gian để tái cấu trúc dự án lỗ của tôi chỉ để thấy rằng tôi không được phép làm những gì tôi đã làm ... dafug ...
C4d

35
Đây là một trong những lý do tại sao tôi không thích Go. Và nó chỉ là một trong hàng tá lý do.
tom10271

12
Cho phép deps tròn sẽ tăng đáng kể thời gian biên dịch vì toàn bộ vòng tròn deps của bạn sẽ cần được biên dịch lại mỗi khi một trong các dep thay đổi. Có deps tròn cũng là một tải nặng về nhận thức vì nó khiến cho việc lập luận về chương trình của bạn trở nên khó khăn hơn và có xu hướng phức tạp.
jmaloney

bạn đang sử dụng công
cụ nói dối

Tôi có thể thấy lỗi này khi chạy ứng dụng quawatcher
R Sun

98

Tôi chỉ gặp phải điều này. Bạn có thể đang truy cập một phương thức / loại từ trong cùng một gói bằng chính tên gói.

Dưới đây là một ví dụ để minh họa điều tôi muốn nói:

Trong foo.go:

// foo.go
package foo

func Foo() {...}

Trong 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

6
Theo tôi đây là câu trả lời tốt hơn. Câu trả lời được chấp nhận là hợp lệ, nhưng không giải thích bất cứ điều gì ngoài lý thuyết cho một thất bại như vậy. Tuy nhiên, câu trả lời của @Jonathan Lin giải thích hoàn hảo thông báo lỗi khó hiểu này và cách chống lại nó.
fantasitcalbeastly

3

Bạn có thể đã nhập khẩu,

project/controllers/base

bên trong

project/controllers/routes

Bạn đã nhập trước đó. Điều đó không được hỗ trợ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.