कीवर्ड संस्करण के बाद अंडरस्कोर और इंटरफ़ेस का नाम क्या है?


80

से http://golang.org/src/pkg/database/sql/driver/types.go :

type ValueConverter interface {
    // ConvertValue converts a value to a driver Value.
    ConvertValue(v interface{}) (Value, error)
}

var Bool boolType

type boolType struct{}

var _ ValueConverter = boolType{} // line 58

func (boolType) String() string { return "Bool" }

func (boolType) ConvertValue(src interface{}) (Value, error) {....}

मुझे पता था कि ValueConverter एक इंटरफ़ेस नाम है। पंक्ति 58 यह घोषित करती है कि बूल टाइप इंटरफ़ेस वैल्यूऑनवर्क्स लागू करता है, लेकिन क्या यह आवश्यक है? मैंने लाइन 58 को हटा दिया और कोड अच्छी तरह से काम करता है।


रिक्त पहचानकर्ता _ का उपयोग किसी संरचना में कुंजियों को सख्ती से प्रदान करने के लिए किया जा सकता है। संदर्भ के लिए इसे देखें
वली

जवाबों:


121

यह एक स्थिर (संकलन समय) जाँच प्रदान करता है boolTypeजो ValueConverterइंटरफ़ेस को संतुष्ट करता है। _इस्तेमाल किया के रूप में चर का एक नाम प्रभावी रूप से अलग कर दें आरएचएस मूल्य के लिए संकलक बताता है, लेकिन यह करने के लिए टाइप करें जांच करके यह मूल्यांकन करता है, तो यह कोई साइड इफेक्ट है, लेकिन असल गुमनाम चर किसी भी प्रक्रिया अंतरिक्ष नहीं लेता है।

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



27

ऐसा लगता है कि आप प्रकार का एक डमी मूल्य बना रहे हैं ValueConverter, boolTypeइसे एक नई वस्तु असाइन कर रहे हैं और फिर इसे छोड़ देते हैं (जो जाने में अंडरस्कोर का अर्थ है, जैसे for _, elt := range myRange { ...}कि आप गणना के सूचकांक में दिलचस्पी नहीं रखते हैं)।

मेरा अनुमान है कि यह केवल यह सुनिश्चित करने के लिए एक स्थिर जांच के अनुरूप है कि संरचना इंटरफ़ेस boolTypeको लागू करती ValueConverterहै। इस तरह, जब आप कार्यान्वयन को बदलते हैं boolType, तो कंपाइलर जल्दी शिकायत करेगा यदि आपने ValueConverterइंटरफ़ेस के कार्यान्वयन को तोड़ दिया है क्योंकि यह आपके नए boolTypeको इस इंटरफ़ेस में डालने में असमर्थ होगा ।

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