GOPATH के बाहर एक गो परियोजना के लिए स्रोत कोड होना एक बुरा विचार है


32

मैं गो का उपयोग करके एक नई परियोजना पर काम कर रहा हूं, और हम सभी गो के लिए नए हैं। हम मानक गो निर्देशिका संरचना का अनुसरण कर रहे हैं, और सभी कोड के अंतर्गत हैं

$ GOPATH / src / github.com / companyname / ProjectName

जो एक गिट रिपॉजिटरी की जड़ भी है

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

/
  doc/
  src/
    server/
      main.go
      module1/
        module.go
    client/
      index.html
  Makefile

लेकिन क्या वास्तव में GOPATH के अंदर कोड रखना आवश्यक है?

एक प्रयास के रूप में मैंने एक छोटा कार्यक्रम बनाया जहां स्रोत कोड GOPATH के बाहर था। मैं आसानी से प्रोजेक्ट को पैकेज में विभाजित कर सकता था, इसलिए mainपैकेज का उपयोग करके फ़ोल्डर fooमें पैकेज को संदर्भित कर सकता था ।foo/import "./foo"

जहाँ तक मैं देख सकता हूँ, दो चीजें हैं जो मुझे नापसंद हैं:

  • अन्य कोड इस कोड को आयात नहीं कर सकते। यह कोई समस्या नहीं है क्योंकि हम विशेष रूप से कंपनी के लिए एक सेवा का निर्माण कर रहे हैं।
  • मैं go installइसे स्थापित करने के लिए उपयोग नहीं कर सकता । यह कोई समस्या नहीं है। बिल्ड पाइपलाइन उपकरण को स्थापित करता है।

हालाँकि यह बिल्ड सर्वर को अपने कार्यक्षेत्र को GOPATH के अंदर स्थित नहीं होने देता है

क्या ऐसा दृष्टिकोण हतोत्साहित करता है? यदि हां, तो क्यों?

क्या मेरे द्वारा सूचीबद्ध दो की तुलना में अन्य नकारात्मक दुष्प्रभाव हैं?

ध्यान रखें कि यह कंपनी के लिए एक निजी परियोजना है, न कि सार्वजनिक ओपन सोर्स कोड।

GOPATH से वास्तविक परियोजना का परीक्षण करना आकर्षक लगता है, लेकिन जब आप शू चरण पर होते हैं तो नियमों को तोड़ने में सावधानी बरतनी चाहिए

जवाबों:


12

आपको GOPATH का उपयोग करने की आवश्यकता नहीं है, लेकिन फिर आप goकमांड से मिलने वाली सभी अच्छी टूलिंग को याद करते हैं । वे सभी मानक GOPATH पदानुक्रम में कोड होने की उम्मीद करते हैं।

आपने उल्लेख किया है go install, लेकिन यह भी go test(और अच्छा go test -coverकवरेज टूल) काम नहीं करेगा go get, जो आपको दूरस्थ कोड डाउनलोड करने की अनुमति देता है GOPATH को सब कुछ लिख देगा, इसलिए आपको चीजों को कॉपी करने की आवश्यकता होगी।

निश्चित रूप से, आप इसे मेक / स्कोन / सेमीकेक / जो कुछ भी प्राप्त कर सकते हैं और काम कर सकते हैं और यह आपके पर्यावरण के लिए काम करेगा, लेकिन इसका अतिरिक्त काम जो goटूल द्वारा किया जा सकता है ।


9

(अस्वीकरण: मुझे इस तरह से सामान डिजाइन करना पसंद है लेकिन मैं गो के लिए नया हूं, मैंने इसे अभ्यास में आजमाया नहीं है)

विचार: दोनों क्यों नहीं?

यदि आप खाते में सहानुभूति रखते हैं तो दो ध्रुवीय विकल्प उपलब्ध हैं:

(ए) src में कोड, कार्यक्षेत्र के लिए सममित

/
  doc/
  src/
    server/
      projectname/
    client/
      index.html
  go_workspace/
    src/
      companyname/
        projectname -> ../../../src/server/projectname
      github.com/
        someone/
          library/
    bin/
    pkg/
  Makefile

(बी) कार्यक्षेत्र में कोड, जो src के समरूप है

/
  doc/
  src/
    server/
      projectname -> ../../go_workspace/src/companyname/projectname
    client/
      index.html
  go_workspace/
    src/
      companyname/
        projectname/
      github.com/
        someone/
          somelib/
    bin/
    pkg/
  Makefile

मैं "A" की ओर झुकूंगा क्योंकि:

  • आपके सभी स्रोत शारीरिक रूप से एक साथ रहते हैं,
  • projectname आसानी से अपने स्वयं के रेपो कर सकते हैं, या आप अपने पूरे प्रोजेक्ट के लिए एक रेपो कर सकते हैं,
  • आप पूरे go_workspaceअनवांटेड को रख सकते हैं और इसे एक मेक स्टेप के माध्यम से शुरू कर सकते हैं ( godepतब प्रोजेक्ट को सिमिलिंक करके )

1
यह "ए" होना है, क्योंकि "बी" के साथ "शिकायत" जाओ स्थापित करें: निर्देशिका के लिए कोई स्थापित स्थान {डीओआरएच} GOPATH के बाहर नहीं है।
OJFord

3

2019 अपडेट

अब आपको अपने प्रोजेक्ट को स्टोर करने की आवश्यकता GOPATHनहीं है।

बस इसे बाहर किसी भी निर्देशिका में रखें GOPATH। फिर टाइप करें:

go mod init github.com/youruser/yourproject

आप जाना अच्छा रहेगा।

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