GOPATH और GOROOT का मान क्या होना चाहिए?


323

मैं इस तरह से doozer स्थापित करने की कोशिश कर रहा हूँ :

$ goinstall github.com/ha/doozer

मुझे ये त्रुटियां मिलती हैं।

goinstall: os: go/build: package could not be found locally
goinstall: fmt: go/build: package could not be found locally
goinstall: io: go/build: package could not be found locally
goinstall: reflect: go/build: package could not be found locally
goinstall: math: go/build: package could not be found locally
goinstall: rand: go/build: package could not be found locally
goinstall: url: go/build: package could not be found locally
goinstall: net: go/build: package could not be found locally
goinstall: sync: go/build: package could not be found locally
goinstall: runtime: go/build: package could not be found locally
goinstall: strings: go/build: package could not be found locally
goinstall: sort: go/build: package could not be found locally
goinstall: strconv: go/build: package could not be found locally
goinstall: bytes: go/build: package could not be found locally
goinstall: log: go/build: package could not be found locally
goinstall: encoding/binary: go/build: package could not be found locally

3
@Motin उपरोक्त लिंक अब मान्य नहीं है
Jorrit Reedijk

फ़ाइल प्रोजेक्ट के लिए अप्रचलित हो गई। OSX से संबंधित एक संबंधित मुद्दा यहां पाया गया है: github.com/go-lang-plugin-org/go-lang-idea-plugin/issues/841
Motin

नोट: डिफ़ॉल्ट रूप से, GOPATHगो 1.8 (2017) में आपके लिए सेट किया जाएगा। देखें नीचे मेरा उत्तर
VonC

हाँ, मुझे ये भ्रामक लगे, जिस तरह से देवता संगठित हैं। इससे मदद मिली: albertech.blogspot.com/2017/01/…
jar

1
@BenyaminJafari क्योंकि goinstallवास्तव में प्राचीन पूर्व Go1 है और 2012 के बाद से अस्तित्व में नहीं है।
डेव C

जवाबों:


310

GOPATHप्रलेखन मेंcmd/go चर्चा की गई है :

GOPATHवातावरण चर सूचियों स्थानों पर जाएं कोड देखने के लिए। यूनिक्स पर, मूल्य एक बृहदान्त्र-पृथक स्ट्रिंग है। विंडोज पर, मान एक अर्धविराम से अलग स्ट्रिंग है। योजना 9 पर, मूल्य एक सूची है।

GOPATH मानक गो ट्री के बाहर पैकेज प्राप्त करने, बनाने और स्थापित करने के लिए सेट किया जाना चाहिए।

GOROOTस्थापना निर्देशों में चर्चा की गई है :

गो बाइनरी वितरण मान लेते हैं कि वे /usr/local/go(या c:\Goविंडोज के तहत) में स्थापित किए जाएंगे , लेकिन गो उपकरण को एक अलग स्थान पर स्थापित करना संभव है। इस मामले में आपको GOROOTउस निर्देशिका को इंगित करने के लिए पर्यावरण चर सेट करना होगा जिसमें यह स्थापित किया गया था।

उदाहरण के लिए, यदि आपने इंस्टॉल किया है तो अपने होम डायरेक्टरी में जाएं, आपको निम्न कमांड्स को जोड़ना चाहिए $HOME/.profile:

export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin

नोट: GOROOT केवल कस्टम स्थान पर इंस्टॉल करते समय सेट किया जाना चाहिए।

( क्रिस बंच के जवाब का अद्यतन संस्करण ।)


44
GOPATH पर बहुत अधिक व्यापक जानकारी है कि कैसे गो कोड लिखें। goआदेश को समझने के लिए आवश्यक जानकारी की एक समझ है , जो गो के साथ काम करने के लिए आवश्यक है। उदाहरण के लिए goinstallओपी का उपयोग अब होना चाहिए go get
सोनिया

13
जाने की वास्तविक स्थापना पथ पर भी ध्यान दें। उदाहरण के लिए, एक डिफ़ॉल्ट होमब्रेव सेटअप में, होमब्रे इंस्टॉल हो जाएगा /usr/local/Cellar/go/। इस मामले में निर्यात पथ के साथ export GOROOT=/usr/local/Cellar/go/{version}और सेट किया जाना चाहिए export PATH=$PATH:$GOROOT/bin
इखिलाबी

10
मुझे export GOROOT=/usr/local/Cellar/go/1.2/libexec/मेरे साथ काढ़ा बनाने का काम करना था ।
स्टीवन सोरोका

मैं इसे संपादित करने का सुझाव नहीं दे सकता क्योंकि ऐप शिकायत करता है कि मेरा संपादन "समाहित" प्रतीत होता है कोड (जो इसे कहते हैं, बहुत बहुत धन्यवाद) लेकिन:
वाइल्डकार्ड

गो 1.10 में शुरू, अगर GOROOT परेशान है तो गो उपकरण इसे अपने स्थान से जानने की कोशिश करेगा। मैं लिंक भी पेस्ट नहीं कर सकता क्योंकि पेस्ट स्टैक एक्सचेंज के iOS ऐप में काम नहीं करता है। अभी बहुत निराश हैं।
वाइल्डकार्ड

97

यहाँ मेरा सरल सेटअप है:

directory for go related things: ~/programming/go
directory for go compiler/tools: ~/programming/go/go-1.4
directory for go software      : ~/programming/go/packages

गरोठ, गोपथ, पाथ निम्नलिखित हैं:

export GOROOT=/home/user/programming/go/go-1.4
export GOPATH=/home/user/programming/go/packages
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

तो, संक्षेप में:

GOROOT कंपाइलर / टूल्स के लिए है जो गो इंस्टॉलेशन से आता है।
GOPATH आपके खुद के गो प्रोजेक्ट्स / 3rd पार्टी लाइब्रेरीज़ ("गो गेट" के साथ डाउनलोड किया गया है) के लिए है।


मुझे लगता है कि यह जवाब समझना आसान है क्योंकि फ़ोल्डर संरचना के खिलाफ मैपिंग है।
h-rai

क्या GOPATH में पूरी परियोजना के पेड़ (जैसे गिट) गैर-गो फ़ाइलों के साथ शामिल हैं - जैसे चित्र, स्क्रिप्ट, बिल्ड फ़ाइलें, आदि?
सर्ज मेरालियाकोव

52

पहला रन go env
यदि आप देखते हैं कि गो स्थापित नहीं है, तो आप इसे homebrewपैकेज और / या अन्य तरीकों से स्थापित कर सकते हैं।
यदि आप आउटपुट देख रहे हैं तो आपका Goइंस्टाल है।
यह आपको उन सभी envs को दिखाता है जो सेट हैं और नहीं हैं।

यदि आप इसके लिए खाली देखें GOROOT:

  1. भागो which go(मेरे कंप्यूटर पर /usr/local/go/bin/go) :
  2. फिर इस तरह निर्यात करें export GOROOT=/usr/local/go

यदि आप इसके लिए खाली देखें GOPATH:

  1. मेरे मामले में जाने की परियोजनाओं के लिए अपने कंप्यूटर पर कहीं भी कोई निर्देशिका बनाएं: ~/GO_PROJECTS
  2. फिर export GOPATH=~/GO_PROJECTS

2
which goमेरे लिए किया। यह चॉकलेटी का उपयोग करके पिछले इंस्टॉलेशन से दूसरे गो इंस्टॉलेशन स्थान का उपयोग कर रहा था। उस फ़ोल्डर को हटा दिया और उसे PATH चर से हटा दिया। अब यह काम कर रहा है। धन्यवाद!
sgarg

which goकमांड ने विंडोज 7 में मेरे लिए काम नहीं किया। मुझे कैसे पता चलेगा कि मुझे इस कमांड को कहां चलाना चाहिए
फ़र्स्टपोस्टमेकर

संबंधित विंडो कमांड where goयह है कि आपको निष्पादित फ़ाइल का मार्ग दिखाएगा
Falco

export GOPATH=~/GO_PROJECTSजॉब किया
थमरैसेल्वम

39

GOPATHयहाँ चर्चा की गई है :

GOPATHपर्यावरण चर

GOPATH हो सकता है कि अंदर जाने वाले पथों की एक बृहदान्त्र-अलग-अलग सूची में सेट किया जाए, जिसमें गो कोड, पैकेज ऑब्जेक्ट और एक्ज़िबेबल्स मिल सकते हैं।

GOPATHगो ट्री के बाहर (और मेकफाइल्स लिखने से बचने के लिए) अपने स्वयं के कोड और बाहरी पुस्तकालयों को बनाने और स्थापित करने के लिए गोइस्ट का उपयोग करने के लिए एक सेट करें ।

और यहाँGOROOT चर्चा की गई है :

$GOROOTगो वृक्ष की जड़, अक्सर $HOME/go। यह उस निर्देशिका के जनक के लिए डिफ़ॉल्ट है जहाँ all.bashचलाया जाता है। यदि आप सेट नहीं करना चुनते हैं $GOROOT, तो पारंपरिक मेकफाइल्स का उपयोग करके गो प्रोग्राम विकसित करते समय आपको मेक या गमेक के बजाय गोमेक चलाना होगा।


इसलिए अगर मैं ~ / प्रोजेक्ट्स / इनस्टॉल में जा चुका हूँ, तो os, fmt, आदि को खोजने के लिए वेरिएबल के मान क्या होने चाहिए?
jshen

2
तो जब आप स्थापित करते हैं तो गो कहां स्थापित होता है sudo apt-get install golang?
वेबर 2

9
@ weberc2 अगर आप चलाते go envहैं तो आपको उस जानकारी को देखना चाहिए, मेरे लिए यह था/usr/lib/go/
आंद्रे

19

मैंने go help gopathडॉक्स पढ़े और अभी भी अविश्वसनीय रूप से भ्रमित था, लेकिन एक और गो डॉक पृष्ठ से इस छोटी सी डली को मिला:

GOPATH पर्यावरण चर आपके कार्यक्षेत्र का स्थान निर्दिष्ट करता है। यह गो कोड विकसित करते समय आपके द्वारा सेट किए जाने वाले एकमात्र पर्यावरण चर की संभावना है।

http://golang.org/doc/code.html#GOPATH


10

GOPATH को गो स्थापना की ओर संकेत नहीं करना चाहिए , बल्कि अपने कार्यक्षेत्र में जाना चाहिए ( https://golang.org/doc/code.html#GOPATH देखें )। जब भी आप गो पाने या स्थापित होने के साथ कुछ पैकेज स्थापित करते हैं, तो यह GOPATH के भीतर उतर जाएगा। यही कारण है कि यह आपको चेतावनी देता है कि आप निश्चित रूप से नहीं चाहते हैं कि इंटरनेट से यादृच्छिक पैकेज आपके आधिकारिक इंस्टॉलेशन में डंप हो जाएं।


9

गो 1.8 (Q2 2017) से शुरू होकर, GOPATH आपके लिए डिफ़ॉल्ट रूप से $ HOME / गो पर सेट हो जाएगा

देखें मुद्दा 17262 और रोब पाइक की टिप्पणी:

$HOME/goयह।
कोई भी सबसे अच्छा जवाब नहीं है, लेकिन यह छोटा और मीठा है, और यह केवल उस नाम को चुनने के लिए एक समस्या हो सकती है $HOME/goजो पहले से मौजूद है, जो केवल उन विशेषज्ञों के लिए खुश होगा जो पहले से ही स्थापित हैं और समझेंगे GOPATH


कोई विषय इतना सरल कैसे इतना जटिल हो सकता है! यहाँ सर्वोत्तम उत्तर के लिए धन्यवाद।
dodgy_coder

@dodgy_coder वास्तव में ... मेरे अन्य उत्तर की पहली दो पंक्तियों को देखें: stackoverflow.com/a/37905102/6309 ;) यह अंत और भी सरल हो सकता है: कोई और अधिक GOPATH! में अधिक जानकारी stackoverflow.com/a/48914523/6309
VonC

हां मैं सहमत हूं, अगर आप डिफ़ॉल्ट के साथ जाते हैं, तो GOPATH की आवश्यकता नहीं है, क्या यह सही है? Google App Engine (Go Standard) के विकास के वातावरण के लिए आवश्यक होने के कारण मुझे इसे वैसे भी सेट करने की आवश्यकता थी। वे वास्तव में आपको GOPATH सेट करने के लिए कहते हैं, लेकिन आपको यह नहीं बताते कि इसे किस मूल्य पर सेट करें ..!
dodgy_coder

@dodgy_coder हाँ, डिफ़ॉल्ट रूप से, Go एक निश्चित पूर्व निर्धारित मूल्य में प्रोजेक्ट PATH की तलाश करेगा।
VonC

6

जैसा कि ऊपर उल्लेख किया गया है:

GOPATH पर्यावरण चर आपके कार्यक्षेत्र का स्थान निर्दिष्ट करता है।

विंडोज के लिए , इसने मेरे लिए (सुश्री-डॉस विंडो में) काम किया:

set GOPATH=D:\my_folder_for_go_code\

यह एक GOPATH वैरिएबल बनाता है जिसे Ms-dos पहचानता है जब इसे निम्नानुसार इस्तेमाल किया जाता है:

cd %GOPATH%

3

के बारे में GOROOTविशेष रूप से, जाओ 1.9 यह इसकी स्थापना पथ के लिए स्वचालित रूप से सेट हो जाएगा।
आप भले ही कई गो स्थापित, 1.9.x एक बुला सेट हो जाएगा GOROOTकरने के लिए /path/to/go/1.9(से पहले, अगर सेट नहीं है, यह की तरह एक डिफ़ॉल्ट पथ ग्रहण /usr/local/goयाc:\Go )।

देखें सीएल गो रिव्यू 53370 :

go toolअब पथ जिसमें से यह पेड़ स्थापित की जाएं जड़ का पता लगाने का प्रयास करने के लिए लागू किया गया था का उपयोग करेगा
इसका अर्थ है कि यदि संपूर्ण गो स्थापना को एक नए स्थान पर ले जाया जाता है, तोgo tool इसे हमेशा की तरह काम करना जारी रखना चाहिए।

यह GOROOTपर्यावरण में स्थापित होने से खत्म हो सकता है, जो केवल असामान्य परिस्थितियों में किया जाना चाहिए।
ध्यान दें कि यह runtime.GOROOT()फ़ंक्शन के परिणाम को प्रभावित नहीं करता है , जो मूल स्थापना स्थान की रिपोर्ट करना जारी रखेगा; यह बाद के रिलीज में तय किया जा सकता है।


0

२०२० और गो संस्करण १.१३+ के अनुसार, विंडोज में GOPATH को अपडेट करने का सबसे अच्छा तरीका सिर्फ कमांड प्रॉम्प्ट में टाइप करना है:

setx GOPATH C:\mynewgopath

0

यहाँ एक समाधान (एकल उपयोगकर्ता) है:

GOROOT=$HOME/.local # your go executable is in $GOROOT/bin
GOPATH=$HOME/.gopath
PATH=$GOROOT/bin:$GOPATH/bin:$PATH

goयदि आप बदल जाते हैं तो शिकायत .gopathकरता है.go

काश वे लोग साथ होते और कैसे rust/cargoसब कुछ एक ही जगह पर करते।


-1

ओएसएक्स में, मैं काढ़ा के साथ स्थापित करता हूं, यहां वह सेटिंग है जो मेरे लिए काम करती है

GOPATH="$HOME/my_go_work_space" //make sure you have this folder created

GOROOT="/usr/local/Cellar/go/1.10/libexec"

-1

मुझे जोड़ना था

export GOROOT=/usr/local/Cellar/go/1.10.1/libexec

मैक ओएस एक्स पर मेरी ~ / .bash_profile करने के लिए


-1

एक मामला यह भी है कि जब हम उपयोग करते हैं तो यह सभी गो फाइलों को संकलित करता है।

तो हम कहते हैं कि हमारे पास एक फ़ाइल main.go थी और बाद में हमने वर्तमान फ़ाइल को main_old.go में बदल दिया और फिर अपनी नई main.go फ़ाइल जोड़ी । फिर जब हम अपना ऐप बनाएंगे तो सभी गो फाइल संकलित हो जाएंगी। तो जो त्रुटि हो रही है वह कुछ अन्य गो फाइलों में संकलन त्रुटि के कारण हो सकती है।


-1

एक बार गो लैंग स्थापित हो जाने के बाद, GOROOT इंस्टॉलेशन की मूल निर्देशिका है।

जब मैंने Windows C: \ निर्देशिका में गो लैंग बाइनरी में विस्फोट किया, तो मेरा GOROOT C: \ go होना चाहिए। यदि Windows इंस्टॉलर के साथ स्थापित किया गया है, तो यह C: \ Program Files \ go (या C: \ Program Files (x86) \ go, 64-बिट पैकेज के लिए) हो सकता है

 GOROOT = C:\go

जबकि मेरा GOPATH गो लैंग स्रोत कोड या कार्यक्षेत्र का स्थान है।

यदि मेरा Go लैंग सोर्स कोड C: \ Users \\ GO_Workspace पर स्थित है, तो आपका GOPATH निम्नानुसार होगा:

 GOPATH = C:\Users\<xyz>\GO_Workspace

-1

आपको स्पष्ट रूप से सेट करने की आवश्यकता नहीं है GOROOT (गो के आधुनिक संस्करण गो बाइनरी के स्थान के आधार पर अपने आप यह पता लगा सकते हैं कि आप क्या चलाते हैं)।

इसके साथ काम करने की कोशिश करते समय फॉलो एरर भी मिला vgo:

go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'

GOROOT को हटाकर, मेरे GOPATH को अपडेट किया जा रहा है और export GO111MODULE="on" किया और समस्या को हल किया।

GOPATH यहाँ देखें

GOPATH उन कॉलनों की एक अलग-अलग सूची में सेट की जा सकती है, जिनके अंदर Go कोड, पैकेज ऑब्जेक्ट और एक्ज़िबेबल्स मिल सकते हैं।

गो ट्री के बाहर (और मेकफाइल्स लिखने से बचने के लिए) अपने स्वयं के कोड और बाहरी पुस्तकालयों को बनाने और स्थापित करने के लिए गोस्टाइम का उपयोग करने के लिए एक GOPATH सेट करें।



-3

यदि आप डिस्ट्रो गो का उपयोग कर रहे हैं, तो आपको इंगित करना चाहिए कि इसमें शामिल फाइलें कहां हैं, उदाहरण के लिए:

$ rpm -ql golang | grep include
/usr/lib/golang/include

(यह फेडोरा 20 के लिए है)

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