2014-10-07 8 views
11

मैं एक codebase जहां एक फ़ाइल कार्यों के रूप में एक ही फाइल में काफी Structs, Interfaces और Variables की एक बहुत कुछ शामिल है और मुझे यकीन है कि अगर मैं अलग में इस अलग करने की जरूरत है नहीं कर रहा हूँ के साथ कोड संगठन फाइलनाम संलग्न करने वाली फाइलें। तो उदाहरण के लिए क्रमशः accounts.goaccounts_struct.go और accounts_interface.go संरचना और इंटरफेस के साथ होगा।Golang - structs, चर और इंटरफेस

जब आप स्ट्रक्क्ट्स, वेरिएबल्स और इंटरफेस के लिए कोडबेस बढ़ा रहे हैं तो फ़ाइल संगठन के लिए एक अच्छा तरीका क्या होगा? http://golang.org/src/pkg/

आप है कि इस दृष्टिकोण (struct, इंटरफ़ेस की तरह भाषा आइटम के आधार पर अलग करने, ...) कभी नहीं किया जाएगा देखेंगे:

+1

मुझे लगता है कि यह बहुत व्यापक है ... लेकिन मेरी सलाह है कि आपके कोड के ज्ञान के बारे में क्या सोचें और देखें कि क्या आप इसे छोटे हिस्सों में विभाजित कर सकते हैं जिनके पास कम ज्ञान है। मनमाने ढंग से सभी structs को एक फ़ाइल में डालने का फैसला न करें, यह अजीब है। –

+1

लगभग सभी मामलों में अब तक (वास्तव में, वेब ऐप्स के बहुत ही सामने वाले अंत को छोड़कर) मैं अपने बहुत सारे कोड को स्वयं निहित, पुनः उपयोग करने योग्य पैकेज में विभाजित करने में सक्षम हूं। आपको देखना चाहिए कि क्या आपके कोड के साथ भी यह संभव है। –

उत्तर

10

की जाँच करने के लिए एक अच्छा मॉडल जाओ खुद के स्रोत कोड है।

सभी फाइलें विशेषताओं पर आधारित हैं, और निकटता सिद्धांत दृष्टिकोण का उपयोग करना सबसे अच्छा है, जहां आप उसी फ़ाइल में जो भी उपयोग कर रहे हैं उसकी परिभाषा को पा सकते हैं।
आम तौर पर, उन सुविधाओं, पैकेज प्रति एक फ़ाइल में वर्गीकृत किया है बड़े लोगों, जहां एक पैकेज कई फाइलों से बना है (net, net/http)

आप कुछ भी अलग करने के लिए, स्रोत (xxx.go) को अलग करना चाहते हैं से के अलावा tests/benchmarks (xxx_test.go)

+0

बढ़िया! क्या शीर्ष पर या सीधे func पर स्ट्रक्चर डालना सबसे अच्छा है? –

+0

@Passionate डेवलपर मैं शीर्ष पर पसंद करता हूं, विभिन्न प्रकार के उपयोग (संरचना, func, उपनाम, ...) को परिभाषित करता हूं, खासकर यदि वे सार्वजनिक प्रकार (अपरकेस के साथ) हैं। लेकिन आंतरिक निजी प्रकार (लोअरकेस) के लिए, मैं उन्हें कोड के बीच में परिभाषित करता हूं, बस उनका उपयोग करने से पहले। – VonC

+0

@Passionate डेवलपर किसी भी मामले में, golint (https://github.com/golang/lint) और जाओ पशु आपके दोस्त हैं। https://blog.splice.com/going-extra-mile-golint-go-vet/ – VonC

8

पैकेज तैयार करने के लिए मेरा मानसिक मॉडल यहां है।

ए। एक पैकेज में एक विचार या अवधारणा शामिल होना चाहिए। http एक अवधारणा है, http क्लाइंट या http संदेश नहीं है।

बी। पैकेज में एक फ़ाइल को संबंधित प्रकारों के एक सेट को शामिल करना चाहिए, अंगूठे का एक अच्छा नियम यह है कि यदि दो फाइलें आयात के समान सेट को साझा करती हैं, तो उन्हें मर्ज करें। पिछले उदाहरण का उपयोग करके, http/client.go, http/server.go ग्रैन्युलरिटी

सी का एक अच्छा स्तर है। प्रति फ़ाइल एक फ़ाइल न करें, यह मूर्खतापूर्ण नहीं है।

+0

+1। मैं सहमत हूँ। यह मुझे http://stackoverflow.com/a/14870666/6309 में उस समय मिली कुछ सलाहयों की याद दिलाता है। – VonC