2015-10-26 9 views
5

मैं समझता हूं कि "आंतरिक" पैकेज का उपयोग करके कोड को व्यवस्थित करने के तरीके को कैसे व्यवस्थित किया जाए। मुझे दिखाओ क्या संरचना मेरे पास करते हैं:"आंतरिक" पैकेज का उपयोग कैसे करें?

project/ 
    internal/ 
    foo/ 
     foo.go # package foo 
    bar/ 
     bar.go # package bar 
    main.go 

# here is the code from main.go 
package main 

import (
    "project/internal/foo" 
    "project/internal/bar" 
) 

project/ GOPATH पेड़ से बाहर है। जो भी रास्ता मैं main.go से आयात करने का प्रयास करता हूं, कुछ भी काम नहीं करता है, ठीक काम करने वाला एकमात्र मामला import "./internal/foo|bar" है। मुझे लगता है कि मैं कुछ गलत करता हूं या सामान्य रूप से "आंतरिक" पैकेज विचार गलत करता हूं। क्या कोई चीजों को स्पष्ट कर सकता है, कृपया?

अद्यतन

ऊपर के उदाहरण केवल मैं क्या जरूरत $GOPATH/src तहत project/ फ़ोल्डर जगह था सही है। तो चीज आयात पथ है जैसे project/internal/foo|bar काम करने योग्य है अगर हम इसे केवल project/ उपट्री से आयात करते हैं और बाहर से नहीं।

+5

निर्माण करने के लिए आप संकुल कि '$ GOPATH/src' में नहीं हैं आयात नहीं कर सकते योजना है। 'प्रोजेक्ट/बाज' पैकेज बनाने का प्रयास करें, आप इसे आयात करने में सक्षम नहीं होंगे। अपनी सभी परियोजनाओं को GOPATH में रखें। –

+0

क्या होगा यदि मैं हर परियोजना को GOPATH के तहत नहीं रखना चाहता हूं? –

+2

इस तरह गो उपकरण काम करते हैं। यदि आप एक पैकेज का उपयोग करना चाहते हैं, तो इसे GOPATH के तहत होना चाहिए। – JimB

उत्तर

6

पैकेज आयात करने के लिए आपके $GOPATH में स्थित होना चाहिए। उदाहरण import "./internal/foo|bar" के साथ दिया गया उदाहरण काम करता है क्योंकि यह स्थानीय आयात करता है। internal केवल इतना कोड बनाता है जो आपकी internal निर्देशिका में एक सामान्य रूट निर्देशिका साझा नहीं करता है, internal के भीतर पैकेज आयात नहीं कर सकता है।

आप अपने gopath में यह सब डाल तो OuterFolder/project2/main.go की तरह एक अलग स्थान है, जहां OuterFolder दोनों project और project2 शामिल हैं, फिर import "../../project/internal/foo" विफल हो जाएगा से आयात करने की कोशिश की। यह import "foo" या इस शर्त को संतुष्ट करने के कारण आपके द्वारा किए गए किसी अन्य तरीके से भी असफल हो जाएगा;

तत्व से युक्त "आंतरिक" एक पथ का एक आयात करता है, तो आयात कोड पेड़ "आंतरिक" निर्देशिका की पेरेंट में निहित बाहर है अनुमति नहीं है।

अब अगर आप पथ $GOPATH/src/project था तो आप $GOPATH/src/project/main.go के भीतर से import "foo" और import "bar" कर सकता है और आयात सफल हो जाएगा। ऐसी चीजें जो project के नीचे निहित नहीं हैं, हालांकि foo या bar आयात करने में सक्षम नहीं होंगे।

0
रास्ता नीचे

को और अधिक विश्वसनीय है, खासकर जब आप एक से अधिक बाइनरी

github.com/servi-io/api 
├── cmd/ 
│ ├── servi/ 
│ │ ├── cmdupdate/ 
│ │ ├── cmdquery/ 
│ │ └── main.go 
│ └── servid/ 
│  ├── routes/ 
│  │ └── handlers/ 
│  ├── tests/ 
│  └── main.go 
├── internal/ 
│ ├── attachments/ 
│ ├── locations/ 
│ ├── orders/ 
│ │ ├── customers/ 
│ │ ├── items/ 
│ │ ├── tags/ 
│ │ └── orders.go 
│ ├── registrations/ 
│ └── platform/ 
│  ├── crypto/ 
│  ├── mongo/ 
│  └── json/ 

for more

संबंधित मुद्दे