2015-01-29 8 views
5

len() और make() फ़ंक्शन कैसे काम करते हैं? चूंकि भाषा में जेनेरिक और फ़ंक्शन ओवरलोडिंग दोनों के लिए समर्थन की कमी है, इसलिए मुझे नहीं लगता कि func len(v Type) int कैसे संभव है। यह func make(Type, size IntegerType) Type के लिए जाता है।गोलांग: कैसे लेन() और मेक() फ़ंक्शन काम करते हैं?

मैं जाने स्रोत में समारोह को खोजने के लिए नहीं कर पा रहे, निकटतम मैं खोजने के लिए प्रबंधित किया है this

उत्तर

9

len और make कार्यों भाषा विवरण के एक हिस्से और निर्मित संकलक के लिए कर रहे है । अंतर्निहित कार्यों के लिए रनटाइम समर्थन runtime package में है।

फ़ाइल builtin.go फ़ाइल केवल प्रलेखन के लिए उपयोग की जाती है। यह संकलित नहीं है।

+1

यह कंपाइलर का हिस्सा होने से अधिक है: यह भाषा विनिर्देश के हिस्से के रूप में हार्ड-कोड किया गया है। https://golang.org/ref/spec#Length_and_capacity https://golang.org/ref/spec#Making_slices_maps_and_channels – dyoo

+2

लेन भी एकमात्र "फ़ंक्शन" है जो एक कॉन्स लौटने में सक्षम है (जब सरणी पर उपयोग किया जाता है)। स्पेस अंतर्निहित विशेष शक्तियां देता है, हम केवल प्राणघातक प्रोग्रामर मेल नहीं खाते हैं। –

+0

क्या सटीक जगह पर एक लिंक है जहां वास्तव में 'लेन' लागू किया गया है? –

1

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

कंपाइलर्स के पास सभी प्रकार की चाल हैं, संकलक द्वारा उत्पन्न असेंबली कोड शायद ही आपके द्वारा टाइप किए गए सटीक उसी तर्क का पालन करता है।

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