आयात चक्र की अनुमति नहीं है


135

मेरे साथ एक समस्या है

आयात चक्र की अनुमति नहीं है

ऐसा प्रतीत होता है, जब मैं अपने नियंत्रक का परीक्षण करने की कोशिश कर रहा हूं। आउटपुट के रूप में मुझे मिला है

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

क्या कोई मुझे बता सकता है, इस त्रुटि को कैसे पढ़ें या समझें? कहाँ निर्भरता गलत है?


13
accountपैकेज आयात baseपैकेज है, जो आयात muxपैकेज है, जो आयात करता है accountपैकेज। यह आयात निर्भरता का एक चक्रीय सेट है, जिसकी अनुमति नहीं है। ऐसा लगता है कि आपके पास एक और चक्र भी है, baseआयात mux, जो आयात करता है routes, जो आयात करता है base
अमित कुमार गुप्ता

जवाबों:


170

यहां आपकी पहली आयात चक्र समस्या का एक चित्रण है।

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

आप मेरा बुरा ASCII चार्ट के साथ देख सकते हैं कि आप एक आयात चक्र पैदा कर रहे हैं जब है project/components/muxआयात project/controllers/account। चूंकि गो import cycle not allowedसंकलित निर्भरताओं का समर्थन नहीं करता है इसलिए आपको संकलन समय के दौरान त्रुटि मिलती है ।


10
इतना बुरा यह केवल संकलन पर दिखाता है। मेरी होल परियोजना के पुनर्गठन के लिए बहुत समय बर्बाद हुआ, यह देखने के लिए कि मुझे क्या करने की अनुमति नहीं है ... dafug ...
C4d

35
यह एक कारण है कि मुझे गो पसंद नहीं है। और यह दर्जन भर कारणों में से एक है।
टॉम 10271

13
परिपत्र डिप्स की अनुमति देने से कंपाइल समय में काफी वृद्धि होगी, क्योंकि डिपो के आपके पूरे सर्कल को हर बार डिपॉजिट में से एक को बदले जाने की आवश्यकता होगी। परिपत्र डिप्स होना भी एक भारी संज्ञानात्मक भार है क्योंकि इससे आपके कार्यक्रम के बारे में तर्क करना मुश्किल हो जाता है और जटिलता की ओर झुक जाता है।
१०:०१ पर १२

आप किस
लाइनर

मैं इस त्रुटि को ऐप रनिंग के दौरान देख सकता हूंwatcher
R Sun

98

मैंने अभी इसका सामना किया। आप पैकेज नाम का उपयोग करके उसी पैकेज के भीतर से एक विधि / प्रकार तक पहुँच सकते हैं।

यहाँ एक उदाहरण है कि मेरा क्या मतलब है:

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

6
मेरी राय में यह बेहतर उत्तर है। स्वीकृत उत्तर केवल मान्य है, लेकिन इस तरह की विफलता के लिए सिद्धांत के अलावा कुछ भी नहीं समझाता है। @ जोनाथन लिन का जवाब हालांकि, इस गुप्त त्रुटि संदेश को पूरी तरह से समझाता है, और इसका मुकाबला कैसे करना है।
fantasitcalbeastly

3

आपने आयात किया हो सकता है,

project/controllers/base

के अंदर

project/controllers/routes

आप पहले ही आयात कर चुके हैं। वह समर्थित नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.