दिलचस्प पोस्ट
302 और 307 रीडायरेक्ट में अंतर क्या है? एक साथ और पृथक SEAWAT / MODFLOW मॉडल चलाए जाने के लिए पायथन के मल्टीप्रोसेसिंग मॉड्यूल का उपयोग करना क्यों नहीं eigenclass self.class के बराबर है, जब ऐसा दिखता है? PHP: 2 दशमलव स्थानों पर नंबर दिखाएं लैम्ब्डा में कैप्चर ले जाएं क्या मॉडलस्टेट है। क्या वैध है ASP.NET MVC में NerdDinner में मान्य है? पोर्ट और गर्तिका के बीच अंतर क्या है? जावास्क्रिप्ट में फ़ंक्शन पैरामीटर के रूप में एक सरणी को पास करना एक जावास्क्रिप्ट ऑब्जेक्ट की एक प्रति को संशोधित करना मूल ऑब्जेक्ट को बदलना है Servlet को फ़ॉर्म सबमिट करने के बाद मैं जेएसएपी में HTML प्रपत्र फ़ील्ड वैल्यू कैसे बना सकता हूं? सूचकांक 'सी' में शून्य से क्यों शुरू होता है? डोमेन पर एक जावास्क्रिप्ट कुकी बनाने और इसे उप डोमेन भर में पढ़ना अजगर में यूटीसी टाइमस्टैम्प को datetime.date परिवर्तित करना सेग्यू के माध्यम से डेटा पास करें क्या एक जावा वर्ग रनटाइम पर खुद को एक विधि जोड़ सकता है?

निर्माण का निर्माण क्या होता है?

नए जाओ प्रोग्रामर अक्सर नहीं जानते हैं या भ्रम नहीं मिलता है कि मूलभूत बिल्ड कमांड क्या करता है

क्या वास्तव में go build और go install आज्ञाओं का निर्माण और वे कहाँ परिणाम / आउटपुट डाल दिया?

वेब के समाधान से एकत्रित समाधान "निर्माण का निर्माण क्या होता है?"

क्या go कमांड इस पर निर्भर करता है कि क्या हम इसे "सामान्य" पैकेज के लिए चलाते हैं या विशेष "main" पैकेज के लिए

पैकेज के लिए

  • go build निर्माण आपके पैकेज बनाता है, फिर परिणाम निकालता है I
  • go install स्थापित करें , तो आपके $GOPATH/pkg निर्देशिका में पैकेज इंस्टॉल करता है

कमांड के लिए (पैकेज main )

  • go build कमांड बनाता है और वर्तमान कार्य निर्देशिका में परिणाम छोड़ देता है
  • go install एक कमांड को एक अस्थायी निर्देशिका में बनाया जाता है तो उसे $GOPATH/bin ले जाता है

असल में आप एक चेक के रूप में go build उपयोग कर सकते हैं कि संकुल को बनाया जा सकता है (अपनी निर्भरता के साथ) जबकि go install भी (स्थायी रूप से) आपके $GOPATH के उचित फ़ोल्डर में परिणाम स्थापित करता है

यदि go build ठीक है, तो चुपचाप समाप्त हो जाएंगे, और पैकेज को बनाया / संकलित नहीं किया जा सकता है, तो आपको त्रुटि संदेश देगा

जब भी टूल एक पैकेज या बाइनरी स्थापित करता है, तब भी यह जो भी निर्भरताएं स्थापित करता है, इसलिए चलते go install भी संकुल go install करेगा, आपका प्रोग्राम (सार्वजनिक रूप से उपलब्ध, "gettable" पैकेज) पर निर्भर करता है, स्वचालित रूप से

एक शुरुआत के लिए, आधिकारिक कैसे लिखें लिखें कोड पृष्ठ पढ़ें

go टूल के बारे में अधिक जानकारी: कमांड जाएं

आप निम्न आदेश को चलाकर भी अधिक सहायता प्राप्त कर सकते हैं:

 go help build 

यह भी ध्यान देने योग्य है कि Go 1.5 go install शुरू होने से भी go build ( स्रोत ) द्वारा बनाए गए निष्पादनयोग्य को निकाल दिया जाता है:

यदि 'स्थापित करें' (कोई तर्क नहीं, वर्तमान निर्देशिका जिसका अर्थ है) सफल होता है, तो 'चलना' द्वारा लिखित निष्पादन योग्य को हटा दें, यदि मौजूद हो। यह पीछे बासी बाइनन छोड़ने से बचा जाता है …

सूची को पूरा करने के लिए, go run अपने एप्लिकेशन को एक अस्थायी फ़ोल्डर में संकलित करें, और निष्पादन योग्य द्विआधारी शुरू करता है। जब ऐप मौजूद होता है, तो यह अस्थायी फ़ाइलों को ठीक से साफ करता है।

डेव चेनी से प्रेरित प्रश्न क्या निर्माण का निर्माण करता है?

पैकेज के लिए:

go build बनाएं : आपका पैकेज तैयार करता है , फिर परिणाम निकाल देता है

यह गो 1.10 (Q1 2018) के बाद सही नहीं होगा, CL 68116 और CL 75473 के लिए धन्यवाद। यह धागा देखें, जो कि मैं यहां संदर्भ देता हूं।

क्या वास्तव में go build और कमांड बिल्ड को go install

जब भी टूल एक पैकेज या बाइनरी स्थापित करता है, तब भी यह जो भी निर्भरताएं स्थापित करता है, इसलिए चलते चलते हुए इंस्टॉल भी संकुल इंस्टॉल करेगा, आपका प्रोग्राम (सार्वजनिक रूप से उपलब्ध, "gettable" पैकेज) पर निर्भर करता है, स्वचालित रूप से

दरअसल … go install करें नए कैश के अलावा , गो 1.10 के साथ भी बदलेगा:

" go install " कमांड अब नामित संकुल ( सीएल 75850 ) की निर्भरता स्थापित नहीं करता है

यदि आप " go install foo " चलाते go install foo , तो केवल एक चीज स्थापित है foo

इससे पहले, यह विविधता थी यदि निर्भरताएं पुरानी थी, तो " go install " ने किसी भी निर्भरता को भी इंस्टॉल किया
" go install " के दौरान निर्भरता की असत्य स्थापना ने उपयोगकर्ताओं के लिए बहुत भ्रम और सिरदर्द का कारण बना, लेकिन वृद्धिशील बिल्ड को सक्षम करने के लिए पहले यह आवश्यक था।
अब और नहीं।
हमें लगता है कि नया " install what I said " install what I said अधिक समझदार होगा, खासकर क्योंकि यह बग रिपोर्ट से स्पष्ट है कि बहुत से उपयोगकर्ताओं ने पहले से ही उन्हें उम्मीद की थी
" go install " के दौरान निर्भरता go install , " go build -i " और " go test -i " के साथ सादृश्य द्वारा नए " go install -i " का उपयोग करें

तथ्य यह है कि " go install " किसी भी पुनर्निर्मित निर्भरता को स्थापित करने के लिए उपयोग किया जाता है -a के साथ संयोजन में अक्सर भ्रम उत्पन्न होता है, जिसका अर्थ है " force rebuild of all dependencies "
अब, " go install -a myprog " go install -a myprog के सभी निर्भरताओं के साथ-साथ myprog की पूरी तरह से पुनर्निर्माण के लिए मजबूर हो जाएगा, लेकिन केवल myprog स्थापित हो जाएगा (सभी पुनर्निर्मित निर्भरता अभी भी निर्माण कैश में बच जाएंगी।)
इस मामले को अधिक स्पष्ट रूप से काम करना नई सामग्री आधारित स्टेलेनेस विश्लेषण के साथ विशेष रूप से महत्वपूर्ण है क्योंकि यह पहले से कहीं अधिक निर्भरताओं को पुनर्निर्माण करने के अच्छे कारणों को देखता है, जिसने "मेरी निर्भरताएं क्यों स्थापित हो गईं" भ्रम को बढ़ा दिया होता
उदाहरण के लिए, यदि आप " go install -gcflags=-N myprog " चलाते हैं, तो कोई कंपाइलर ऑप्टिमाइज़ेशन के साथ निर्मित एक myprog स्थापित करता है, लेकिन यह संकुल अनुकूलन के बिना मानक लायब्रेरी से उपयोग किए myprog वाले संकुलों को पुनः इंस्टॉल भी करता है।