गो में फाइलनामों के लिए सम्मेलन क्या हैं?


114

मुझे गो में संकुल नामकरण के लिए अधिवेशन मिल सकता है: शब्दों के बीच कोई अंडरस्कोर नहीं, सब कुछ कम।

क्या यह सम्मेलन फिल्नामों पर भी लागू होता है?

क्या आप भी एक फाइल में एक स्ट्रक्चर रखते हैं जैसे कि आपने जावा क्लास के लिए किया था और फिर फाइल को स्ट्रक्चर के नाम पर रखा?

वर्तमान में, यदि मेरे पास एक वेबसर्वर है, तो मैंने इसे web_server.go फ़ाइल में डाल दिया है।


3
AFAIK में कोई सम्मेलन नहीं है, लेकिन _ प्रत्यय भविष्य में विशेष शब्दार्थ हो सकते हैं इसलिए मैं उनसे बचने की सलाह देता हूं।
फ़ूज

जवाबों:


126

पालन ​​करने के लिए कुछ दिशानिर्देश हैं।

  1. फ़ाइल नाम जो "से शुरू होता है।" या "_" को गो टूल द्वारा नजरअंदाज कर दिया जाता है
  2. प्रत्यय के साथ फाइल _test.goकेवल go testउपकरण द्वारा संकलित और चलाई जाती है ।
  3. ओएस और आर्किटेक्चर विशिष्ट प्रत्ययों के साथ फाइलें स्वचालित रूप से उन समान बाधाओं का पालन करती हैं, उदाहरण के name_linux.goलिए केवल लिनक्स पर बनाएगी, name_amd64.goकेवल amd64 पर बनाएगी। यह //+build amd64फ़ाइल के शीर्ष पर एक रेखा होने के समान है

go buildअधिक विवरण के लिए टूल के डॉक्स देखें: https://golang.org/pkg/go/build/


3
यह कहाँ प्रलेखित है? धन्यवाद!
अभिजीत रस्तोगी

2
@AbhijeetRastogi: golang.org/pkg/go/build और golang.org/cmd/go
JimB

3
अगर मैं के लिए निर्माण करना चाहते हैं मैं क्या करना चाहिए करने के लिए unixऔर others। उदाहरण के लिए मैं दो फ़ाइलों कर सकते हैं file_windows.goऔर file_others.go। यह बढ़िया काम करता है। लेकिन के लिए file_unix.goऔर file_others.goयह does'n 'काम करते हैं। मैं आठ फाइलें नहीं बनाना चाहता darwin freebsg linux openbsd netbsd dragonfly solaris android
इवान ब्लैक

3
@ फ़ायर: फ़ाइल नाम आम तौर पर सभी लोअरकेस होते हैं, दोनों में संगति के लिए और केस-असंवेदनशील फाइल सिस्टम के लिए सिस्टम के लिए।
जिम डे

1
@IvanBlack के समान प्रश्न वाले किसी व्यक्ति के लिए, बिल्ड टैग का उपयोग करके इसे पूरा किया जा सकता है। कैसे करना है की एक अच्छा अवलोकन के लिए यहाँ देखें: dave.cheney.net/2013/10/12/…
इयान गुस्ताफसन

30

जिमब द्वारा प्रदान किए गए उत्तर के अलावा , नियमित फ़ाइल नाम लोअर केस, शॉर्ट और बिना किसी प्रकार के अंडरस्कोर या स्पेस के होते हैं। आमतौर पर, फ़ाइल नाम पैकेज नामों के समान कन्वेंशन का अनुसरण करते हैं। प्रभावी गो के पैकेज नाम अनुभाग देखें

अच्छे उदाहरण के लिए strconv पैकेज देखें ।


3
आप लंबी फ़ाइलों को क्या नाम देंगे? mycommandsub1command.goया my_command_sub1command.go, और किस बारे मेंmycommandVO
user2727195

9
मैं लंबे नामों के लिए अंडरस्कोर सुझाऊंगा। कुछ अच्छी परियोजनाओं में इसे देखा है।
अवी

17

गो एक पैकेज के भीतर अपने कोड को कैसे व्यवस्थित करते हैं, इस संदर्भ में काफी उदार है, आमतौर पर यह जो कुछ भी है वह आपके कोड की पठनीयता और समझ में सुधार करता है। मास्टर्स का अध्ययन करने के लिए यह कैसे किया जाता है, यह जानने का सबसे अच्छा तरीका है, अर्थात मानक पुस्तकालय हालांकि एक ब्राउज़ करें:

http://golang.org/src/pkg/

हालाँकि मैं 2 नियम सोच सकता हूँ। जब विभिन्न प्लेटफार्मों के लिए संकलित किए जाने वाले कोड को निर्दिष्ट करते हैं, तो आप मंच के नाम का उपयोग प्रत्यय के रूप में करते हैं:

mypkg_linux.go         // only builds on linux systems
mypkg_windows_amd64.go // only builds on windows 64bit platforms

इसके अलावा अगर आपके पास एक फाइल है server.go, तो उस फाइल के परीक्षण अंदर होंगे server_test.go


3
आपके द्वारा दिए गए लिंक में, मुझे अंडरस्कोर के साथ उपयोग के मामले मिले: golang.org/src/pkg/compress/bzip2/move_to_front.go , golang.org/src/pkg/compress/flate/huffman_bit_writer.go , golang.org/ src / pkg / compress / flate / rev_bits.go
डेविड

1
मुझे लगता है कि वे का उपयोग नहीं होगा _front, _writerया _bitsफिर भविष्य में महत्वपूर्ण प्रत्यय के रूप में!
मैट हैरिसन

मुझे गो से प्यार है, लेकिन goपैकेज संरचना के बारे में यह उपकरण बहुत प्रतिबंधक है (यह भाषा के बारे में मेरी पसंदीदा चीजों में से एक है)। यह कुछ बहुत ही विशिष्ट सम्मेलनों (प्रति फ़ोल्डर एक पैकेज [कम से कम एक अपवाद के साथ]) का समर्थन करता है, फ़ोल्डर का पैकेज फ़ोल्डर के समान नाम [कम से कम एक अपवाद के साथ] साझा करता है, पूर्ण पैकेज आयात पथ से संबंधित पथ से मेल खाता है $GOPATH, कुछ फाइलें हैं उनके नाम प्रारूप आदि के आधार पर अलग-अलग व्यवहार किया गया
weberc2

1
@ weberc2 प्रतिबंध लेटेक्स के अनुरूप हैं। सबसे पहले, मैं अपने लेआउट और अन्य अप्रासंगिक विवरणों को नियंत्रित करना चाहता था, जब तक मुझे एहसास नहीं हुआ कि जो कुछ भी लिखा जाना चाहिए वह अच्छी सामग्री है। इसी तरह, गो हमें अच्छे कोड लिखने में सक्षम बनाता है और हमारे लिए अन्य विवरणों को संभालता है।
डेविड

@ दाविद मैं सहमत हूँ। पूर्वव्यापी में मैं स्पष्ट नहीं था: मैं उत्तरदाता के बयान का जवाब दे रहा था Go is quite liberal in terms of how you organise your code within a package। गो उदार नहीं है, यह काफी प्रतिबंधात्मक है। लेकिन यह अच्छी बात है।
weberc2

8

आमतौर पर फ़ाइल नाम में अंडरस्कोर का उपयोग प्लेटफ़ॉर्म / आर्क-ओनली कोड असाइन करने के लिए किया जाता है, उदाहरण के लिए:

 cd $GOROOT/src/pkg/math/
 ls sqrt*s
sqrt_386.s  sqrt_amd64p32.s  sqrt_amd64.s  sqrt_arm.s

sqrt_386.sकंपाइलर द्वारा केवल 32 बिट प्रोसेसर sqrt_amd64.sपर, amd64 आदि पर पढ़ा जाएगा ।

यह मान्य मान के किसी भी हो सकता है GOOSऔर / या GOARCH( रेफरी

file_windows_amd64.go केवल win64 पर संकलित किया जाएगा।

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