go get से पैकेज इंस्टॉल किया, अब हटा नहीं पा रहे? पूरी गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

"मैंने पैकेज इंस्टॉल किया, लेकिन हटा नहीं पा रहा!" — क्या यह कहानी जानी-पहचानी है?

\n\n

आपने अभी-अभी Go सीखना शुरू किया है, GitHub पर एक शानदार लाइब्रेरी मिली, go get github.com/example/package लिखा — और सब कुछ काम कर गया! लेकिन समय बीतता है, प्रोजेक्ट बदलता है, और आपको एहसास होता है: इस पैकेज की अब ज़रूरत नहीं है। आप go remove या go uninstall कमांड ढूंढते हैं, लेकिन... वह मौजूद ही नहीं है।

\n\n

Go की दुनिया में आपका स्वागत है, जहाँ पैकेज हटाना कोई बटन नहीं, बल्कि एक छोटा सा साहसिक कार्य है। इस लेख में हम समझेंगे कि go get के बाद पैकेज कहाँ जाते हैं, उन्हें सही तरीके से कैसे "बाहर निकाला" जाए, और Go में ऐसा क्यों किया गया है। स्पॉयलर: पढ़ने के बाद आप सिस्टम में कचरे से डरना बंद कर देंगे और अपने प्रोजेक्ट्स को साफ रखना सीख जाएंगे।

\n\n

go get कैसे काम करता है: एक संक्षिप्त परिचय

\n\n

हटाने से पहले, आइए समझें कि पैकेज वास्तव में कहाँ जाता है। Go में (वर्जन 1.16 से पहले, लेकिन यह जानकारी अभी भी प्रासंगिक है) go get कमांड पैकेज के सोर्स कोड को दो डायरेक्ट्रीज़ में डाउनलोड करती थी:

\n\n
    \n
  • $GOPATH/src — पैकेज की सोर्स फ़ाइलें (जैसे आपने रिपॉजिटरी क्लोन की हो);
  • \n
  • $GOPATH/pkg — कंपाइल की गई ऑब्जेक्ट फ़ाइलें (.a).
  • \n
\n\n

अगर आप Go modules का उपयोग कर रहे हैं (और वर्जन 1.16 से यह डिफ़ॉल्ट मोड है), तो go get अलग तरीके से काम करता है: यह go.mod में डिपेंडेंसी जोड़ता है और मॉड्यूल को कैश ($GOPATH/pkg/mod) में डाउनलोड करता है।

\n\n

समस्या यह है कि Go में "पैकेज हटाएं" जैसी कोई बिल्ट-इन कमांड नहीं है. भाषा के डेवलपर्स मानते हैं कि अगर पैकेज की ज़रूरत नहीं है, तो बस इसे अपने कोड में इम्पोर्ट न करें। यह तार्किक लगता है, लेकिन अगर जगह खाली करनी हो या व्यवस्था बनानी हो तो क्या करें?

\n\n

तरीका #1: go clean -i (मॉड्यूल के बिना पुराने प्रोजेक्ट्स के लिए)

\n\n

पहले (मॉड्यूल के युग से पहले) go clean -i कमांड मौजूद थी। यह $GOPATH/pkg से पैकेज की कंपाइल की गई फ़ाइलों को हटा देती थी। लेकिन सोर्स फ़ाइलों को यह नहीं छूती थी। यानी आप केवल बाइनरी आर्टिफैक्ट्स हटाते थे, लेकिन कोड src में वैसे ही रहता था।

\n\n
# पैकेज की कंपाइल की गई फ़ाइलें हटाएं\ngo clean -i github.com/example/package\n\n# सोर्स फ़ाइलें अभी भी यहाँ हैं:\nls $GOPATH/src/github.com/example/package
\n\n

व्यवहार में यह असुविधाजनक था। इसलिए Go के आधुनिक वर्जन (1.12 से शुरू) में go clean -i को पुराना घोषित कर दिया गया। अगर आप अब go clean -i लिखते हैं, तो Go बस -i फ्लैग को अनदेखा करेगा और सामान्य go clean (मौजूदा प्रोजेक्ट में ऑब्जेक्ट फ़ाइलें हटाना) चलाएगा।

\n\n

तरीका #2: GOPATH से मैन्युअल हटाना (पुराने उपयोगकर्ताओं के लिए)

\n\n

अगर आप अब भी मॉड्यूल के बिना काम कर रहे हैं (या बस पुराने कचरे को साफ करना चाहते हैं), तो आपको हाथ से काम करना होगा। यहाँ पूरी विधि है:

\n\n
    \n
  1. पता करें कि आपका $GOPATH कहाँ है:
  2. \n
\n\n
go env GOPATH
\n\n

आमतौर पर यह /home/user/go या C:\\Users\\user\\go होता है।

\n\n
    \n
  1. सोर्स फ़ाइलें हटाएं:
  2. \n
\n\n
rm -rf $GOPATH/src/github.com/example/package
\n\n
    \n
  1. कंपाइल की गई फ़ाइलें हटाएं (अगर मौजूद हों):
  2. \n
\n\n
rm -rf $GOPATH/pkg/linux_amd64/github.com/example/package.a
\n\n
\n

महत्वपूर्ण: .a फ़ाइल का पथ आपके OS और आर्किटेक्चर पर निर्भर करता है। linux_amd64 एक सामान्य उदाहरण है। सटीक पथ go list -m से पता किया जा सकता है, लेकिन pkg में पैकेज का पूरा फ़ोल्डर हटाना आसान है।

\n
\n\n

यह तरीका काम करता है, लेकिन यह गंदा है। आप गलती से कुछ ज़रूरी चीज़ हटा सकते हैं। साथ ही, अगर पैकेज का उपयोग अन्य प्रोजेक्ट्स में होता है, तो वे टूट जाएंगे।

\n\n

तरीका #3: आधुनिक तरीका — go mod tidy

\n\n

अगर आप Go modules का उपयोग कर रहे हैं (और अगर आपने 2024 में सीखना शुरू किया है तो आपको इसका उपयोग करना चाहिए), तो सब कुछ बहुत आसान है। जब आप अपने कोड में किसी पैकेज को इम्पोर्ट करना बंद कर देते हैं, तो वह अपने आप go.mod से हट जाता है।

ब्लॉग

पुस्तक अनुशंसाएँ