Go get को समझें: शुरुआती लोगों के लिए Go में पैकेज इंस्टॉल करना

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

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

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

"go get" क्यों काम नहीं कर रहा और इसे कैसे ठीक करें?

\n

अगर आपने कभी सोचा है "How can I install a package with go get?" — तो आप अकेले नहीं हैं। इस सवाल को Stack Overflow पर हज़ारों बार देखा गया है, और यह सही भी है। पहले सब कुछ आसान था: go get github.com/some/package — और लाइब्रेरी सीधे $GOPATH/src में आ जाती थी। लेकिन Go 1.16 आने के बाद सब कुछ बदल गया। अब go get पुराने तरीके से पैकेज इंस्टॉल नहीं करता। इसके बजाय, यह सिर्फ go.mod फ़ाइल को अपडेट करता है। और बाइनरी फ़ाइलें इंस्टॉल करने के लिए go install कमांड आ गई है।

\n

इस लेख में हम समझेंगे कि क्या हुआ, अब सही तरीके से पैकेज और डिपेंडेंसी कैसे इंस्टॉल करें, और शुरुआती लोग अक्सर कहाँ गलती करते हैं। चलिए शुरू करते हैं!

\n\n

संक्षिप्त इतिहास: GOPATH से मॉड्यूल तक

\n

Go 1.11 से पहले, सारा कोड GOPATH नामक एक विशेष फ़ोल्डर में रहता था, जहाँ आपके सभी प्रोजेक्ट और तीसरे पक्ष के पैकेज रखे जाते थे। go get कमांड सीधे वहाँ सोर्स कोड डाउनलोड करती थी। यह सुविधाजनक था, लेकिन वर्जन कंट्रोल में समस्या पैदा करता था: अगर दो प्रोजेक्ट्स को एक ही लाइब्रेरी के अलग-अलग वर्जन चाहिए होते — तो मुश्किल हो जाती थी।

\n

Go modules (Go 1.11 से शुरू और 1.16 में स्थिर) आने के बाद, हर प्रोजेक्ट को अपनी go.mod फ़ाइल मिली, जिसमें डिपेंडेंसी और उनके वर्जन लिखे होते हैं। अब go get अलग तरह से काम करता है:

\n
    \n
  • जोड़ता है डिपेंडेंसी को go.mod में
  • \n
  • डाउनलोड करता है उसे कैश में (आमतौर पर $GOPATH/pkg/mod)
  • \n
  • नहीं बनाता $GOPATH/bin में बाइनरी फ़ाइल
  • \n
\n

अगर आपको कोई तैयार प्रोग्राम इंस्टॉल करना है (जैसे कमांड लाइन टूल) — तो go install का उपयोग करें।

\n\n

अब go get कैसे काम करता है: चरण-दर-चरण समझ

\n

टर्मिनल खोलें और एक नया मॉड्यूल बनाएँ:

\n
mkdir myproject\ncd myproject\ngo mod init myproject
\n

अब मान लीजिए, हम रूटिंग के लिए लोकप्रिय लाइब्रेरी gorilla/mux जोड़ना चाहते हैं। पहले हम लिखते थे:

\n
go get github.com/gorilla/mux
\n

और यह काम करेगा — लाइब्रेरी डाउनलोड हो जाएगी। लेकिन देखिए क्या होता है:

\n
    \n
  1. go.mod में एक लाइन जुड़ जाती है: require github.com/gorilla/mux v1.8.0
  2. \n
  3. प्रोजेक्ट फ़ोल्डर में go.sum फ़ाइल बनती है — सुरक्षा के लिए चेकसम वाली फ़ाइल
  4. \n
  5. लाइब्रेरी का सोर्स कोड कैश में रहता है, प्रोजेक्ट के साथ नहीं
  6. \n
\n

अब आप अपने कोड में पैकेज इम्पोर्ट कर सकते हैं:

\n
package main\n\nimport (\n    "fmt"\n    "github.com/gorilla/mux"\n)\n\nfunc main() {\n    r := mux.NewRouter()\n    fmt.Println("Router created!")\n}
\n

go run main.go चलाएँ — सब काम करेगा। लेकिन अगर आप बाइनरी फ़ाइल (कंपाइल प्रोग्राम) चाहते हैं — तो go get आपको वह नहीं देगा।

\n\n

बाइनरी इंस्टॉल करना: go install मदद के लिए आता है

\n

मान लीजिए, आपको Go में एक बढ़िया टूल मिला, जैसे golangci-lint — कोड लिंटर। इसे सिस्टम में कमांड के रूप में इंस्टॉल करने के लिए पहले लिखते थे:

\n
go get github.com/golangci/golangci-lint/cmd/golangci-lint
\n

अब यह काम नहीं करेगा (चेतावनी देगा)। सही तरीका है:

\n
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
\n

इससे क्या होगा:

\n
    \n
  • Go टूल का सोर्स कोड डाउनलोड करेगा
  • \n
  • उसे कंपाइल करेगा
  • \n
  • तैयार बाइनरी फ़ाइल को $GOPATH/bin (या $GOBIN, अगर सेट है) में रखेगा
  • \n
\n

सुनिश्चित करें कि $GOPATH/bin आपके PATH में जुड़ा है — नहीं तो कमांड उपलब्ध नहीं होगी। इसे जाँचने का तरीका:

\n
echo $GOPATH\n# आमतौर पर /home/user/go\nls ~/go/bin/
\n

अगर वहाँ आपकी बाइनरी फ़ाइल है — तो सब ठीक है।

\n\n

शुरुआती लोगों की आम गलतियाँ (और उनसे कैसे बचें)

\n

Stack Overflow पर सबसे ज़्यादा ये सवाल पूछे जाते हैं:

\n