2012-09-20 26 views
14

यह कुछ हद तक मेरा आखिरी सवाल का एक अनुवर्ती है: golang: installing packages in a local directorygolang: जाना कोशिश करता स्थापित/usr/स्थानीय के बजाय GOPATH

मैं GOPATH सेट $HOME/prog/go/gopath करने के लिए है और इस मार्ग तीन निर्देशिकाओं के साथ मौजूद है:

~/prog/go/gopath$ ls 
bin pkg src 

अब मैं

go install 

स्रोत निर्देशिका के अंदर चलाने के लिए एक module to access the redis database जो मुझे पूछता है स्थापित करने के लिए प्रयास करें। लेकिन आदेश go install मुझे देता है

~/prog/go/gopath/src/redis (go1)$ go install 
go install flag: open /usr/local/go/pkg/darwin_amd64/flag.a: permission denied 
~/prog/go/gopath/src/redis (go1)$ echo $GOPATH 
<myhomedir>/prog/go/gopath 

(जहां <myhomedir> है कोई मान्य पथ)

प्रश्न 1: क्यों go install खाते में नहीं $GOPATH लेती है? प्रश्न 2: $GOPATH का उपयोग करने के लिए go install को कैसे मनाने के लिए?

उत्तर

6

सुनिश्चित नहीं है कि आप कैसे सेटअप करते हैं लेकिन यह संभव है कि इसे std लाइब्रेरी से संकुल बनाने की आवश्यकता हो लेकिन अनुमतियों के कारण नहीं। आप

cd /usr/local/go/src 
sudo ./all.bash 

यह एसटीडी पुस्तकालय का निर्माण और यह सुनिश्चित करें सब कुछ ठीक है बनाने के लिए परीक्षण चलाना चाहिए कोशिश कर सकते हैं।

सुनिश्चित करें कि आपके पास आवश्यकतानुसार $ GOROOT से पढ़ने और निष्पादित करने के लिए उचित अनुमतियां हैं। व्यक्तिगत रूप से मैं सिर्फ golang.org से संग्रह डाउनलोड करता हूं और इसे ~/local/go के अंतर्गत रखता हूं और उचित रूप से गोरोट सेट करता हूं।

+0

मुझे यकीन नहीं है कि मैं समझता हूं कि यह क्या करता है। मेरी जाने की स्थापना अब तक ठीक काम करती है। कभी भी कोई समस्या नहीं थी और यहां तक ​​कि संकलित कामों को पार करना भी ठीक था। – topskip

+0

क्या आपको /usr/local/go/pkg/darwin_amd64/flag.a पढ़ने की अनुमति है? – dskinner

+0

हां, मैं अपने मुख्य उपयोगकर्ता – topskip

3

मुझे लगता है कि आदेश की जरूरत है "मिल जाना" है:

go get github.com/alphazero/Go-Redis 

गो-Redis पुस्तकालय डाउनलोड करने और इसे अपने $ GOPATH/src निर्देशिका में डाल दिया जाएगा।

इंस्टॉल इंस्टॉल एक संकलन करता है और अपने स्वयं के स्रोत कोड पर स्थापित करता है।

मुझे स्वीकार करना होगा, मैं थोड़ी देर के लिए इस पूरी अवधारणा से संघर्ष कर रहा हूं, लेकिन "How to Write Go" की एक सावधानीपूर्वक पुनः पढ़ना और कोड संगठन अनुभाग में आपको यह जानने की आवश्यकता है कि जाने के तरीके के बारे में आपको क्या पता होना चाहिए।

+0

यह मुझे एक ही त्रुटि देता है ... – topskip

+0

... बीटीडब्ल्यू: 'जाओ get'' मैंने जो कोशिश की है उससे 'https: //' के बिना होना चाहिए। "कैसे लिखें लिखें" के लिंक के लिए धन्यवाद! – topskip

+0

क्या GOPATH पथों की सूची नहीं है (पथ के समान)? दस्तावेज कहता है, अगर मैं सही से याद करता हूं। क्या आप वाकई गोरोट का मतलब नहीं हैं? – weberc2

0

समाधान आपके .bash_profile से GOROOT को हटा देता है। फिर go कमांड इसे आपके GOPATH निर्देशिका में स्थापित करेगा। और इतना अजीब बात है: जब मैंने अपने .bash_profile में फिर से गोरोट सेट किया और एक नया खोल बनाया, तो यह भी काम करता है।

5

इसी तरह की समस्याएं। जब मैं अपना $ गोरोट खोजता हूं, तो मुझे लगता है कि सभी पुस्तकालय पहले से ही बनाए गए हैं। लेकिन कुछ कारणों से, यह सभी पुस्तकालयों का पुनर्निर्माण करने की कोशिश करता है। तो मैं बस एक छोटी सी चाल करता हूं:

find /usr/lib/go/pkg/ -name "*.*" | sudo xargs touch 

तब सब कुछ ठीक काम करता है।

+0

पर अधिक जानकारी है $ GOROOT/src और $ GOROOT/pkg में फ़ाइलों के बीच टाइमस्टैम्प मतभेदों के कारण, पीकेजी फाइलें पुरानी होने के लिए निर्धारित हैं और कोशिश कर रही हैं पुनर्निर्मित करने के लिए। लेकिन क्योंकि वे उपयोगकर्ता द्वारा लिखने योग्य नहीं हैं, वहां एक त्रुटि से त्रुटि अस्वीकार कर दी गई है। प्रत्येक .a फ़ाइल को स्पर्श करने से समस्या ठीक हो जाती है। –

+1

मैंने जो आदेश चलाया वह थोड़ा अलग था: 'ढूंढें/usr/local/go -name "* .a" -exec touch -r \ 'जो \' {} \; ' –