Go में स्थानीय पैकेज आयात करना: कोड के साथ चरण-दर-चरण मार्गदर्शिका

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

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

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

Go में स्थानीय पैकेज आयात करने से इतने सवाल क्यों उठते हैं?

\n\n

यदि आपने कभी Go कोड को अलग-अलग फ़ाइलों और फ़ोल्डरों में व्यवस्थित करने का प्रयास किया है, तो आपने निश्चित रूप से could not import "myproject/utils" जैसी त्रुटि देखी होगी। यह शुरुआती Go डेवलपर्स की सबसे आम समस्याओं में से एक है। Stack Overflow पर "How to import local packages in go?" प्रश्न ने हज़ारों बार देखा गया है - और यह उचित भी है।

\n\n

Python के विपरीत, जहाँ आप बस एक फ़ाइल को पास रख सकते हैं और import mymodule लिख सकते हैं, Go को स्पष्ट संरचना और मॉड्यूल की सही सेटिंग की आवश्यकता होती है। लेकिन, एक बार इस तंत्र में महारत हासिल करने के बाद, आप समझ जाएंगे कि यह कितना सुंदर है। आइए इसे हमेशा के लिए समझ लें।

\n\n

संक्षिप्त सिद्धांत: Go पैकेजों को कैसे समझता है

\n\n

कोड लिखने से पहले, तीन प्रमुख सिद्धांतों को याद रखें:

\n\n
    \n
  • Go एक सख्त मॉड्यूलर संरचना वाली भाषा है। प्रत्येक निर्देशिका एक पैकेज (package) है।
  • \n
  • पैकेज का नाम फ़ोल्डर के नाम से मेल खाना आवश्यक नहीं है, लेकिन पठनीयता के लिए ऐसा करना अत्यधिक अनुशंसित है।
  • \n
  • 2019 से स्थानीय पैकेजों का आयात मॉड्यूल के माध्यम से किया जाता है (Go modules)। GOPATH को भूल जाइए - go mod का उपयोग करें।
  • \n
\n\n

अब व्यवहार में आते हैं।

\n\n

चरण 1: मॉड्यूल के साथ एक प्रोजेक्ट बनाएँ

\n\n

टर्मिनल खोलें और अपने प्रोजेक्ट के लिए एक नया फ़ोल्डर बनाएँ:

\n\n
mkdir go-local-imports\ncd go-local-imports\n
\n\n

अब मॉड्यूल को इनिशियलाइज़ करें। मॉड्यूल का नाम कुछ भी हो सकता है, लेकिन एक अद्वितीय पथ (जैसे, रिपॉजिटरी लिंक) का उपयोग करना तर्कसंगत है:

\n\n
go mod init github.com/आपका-उपयोगकर्ता-नाम/go-local-imports\n
\n\n

इस कमांड के बाद, फ़ोल्डर में go.mod फ़ाइल दिखाई देगी। यह स्थानीय और बाहरी दोनों निर्भरताओं का प्रबंधन करेगी।

\n\n

चरण 2: एक स्थानीय पैकेज बनाएँ

\n\n

प्रोजेक्ट के अंदर utils फ़ोल्डर बनाएँ। इसके अंदर, math.go फ़ाइल बनाएँ:

\n\n
mkdir utils\ncd utils\ntouch math.go\n
\n\n

utils/math.go खोलें और लिखें:

\n\n
package utils\n\n// Add दो पूर्णांकों का योग लौटाता है\nfunc Add(a, b int) int {\n    return a + b\n}\n
\n\n

ध्यान दें: फ़ंक्शन Add बड़े अक्षर से लिखा गया है। Go में, इसका मतलब है कि यह निर्यात (सार्वजनिक) किया गया है। यदि आप add लिखते हैं - तो यह निजी होगा और अन्य पैकेजों से सुलभ नहीं होगा।

\n\n

चरण 3: स्थानीय पैकेज को आयात और उपयोग करें

\n\n

प्रोजेक्ट की रूट फ़ोल्डर पर वापस जाएँ और main.go बनाएँ:

\n\n
cd ..\ntouch main.go\n
\n\n

main.go की सामग्री:

\n\n
package main\n\nimport (\n    "fmt"\n    "github.com/आपका-उपयोगकर्ता-नाम/go-local-imports/utils"\n)\n\nfunc main() {\n    result := utils.Add(3, 5)\n    fmt.Println("योग:", result)\n}\n
\n\n

अब प्रोग्राम चलाएँ:

\n\n
go run main.go\n
\n\n

आपको देखना चाहिए:

\n\n
योग: 8\n
\n\n

सब कुछ काम कर रहा है! लेकिन यदि आपको कोई त्रुटि मिली है - तो अगला भाग पढ़ें।

\n\n

सामान्य त्रुटियाँ और उनका समाधान

\n\n

त्रुटि 1: "package is not in GOROOT"

\n\n

आप कुछ इस तरह देखते हैं:

\n
package myproject/utils is not in GOROOT (/usr/local/go/src/myproject/utils)
\n\n

कारण: आप बिना मॉड्यूल के पैकेज आयात करने का प्रयास कर रहे हैं। Go इसे आपके प्रोजेक्ट के बजाय मानक लाइब्रेरी में खोजता है।

\n

समाधान: सुनिश्चित करें कि प्रोजेक्ट की रूट में go.mod है। यदि नहीं है - go mod init मॉड्यूल-नाम चलाएँ।

\n\n

त्रुटि 2: "undefined: utils.Add"

\n\n

कारण: फ़ंक्शन छोटे अक्षर (निजी) से लिखा गया है, या आपने पैकेज आयात किया है लेकिन उसके नाम का उपयोग नहीं कर रहे हैं।

\n

समाधान: जाँचें कि सभी आवश्यक फ़ंक्शन निर्यात किए गए हैं (बड़े अक्षर से), और आप उन्हें

ब्लॉग

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