2012-11-02 36 views
37
http://golang.org/src/pkg/database/sql/driver/types.go 

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

54 var Bool boolType 
55 
56 type boolType struct{} 
57 
58 var _ ValueConverter = boolType{} 
59 
60 func (boolType) String() string { return "Bool" } 
61 
62 func (boolType) ConvertValue(src interface{}) (Value, error) {....} 

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

+0

[भी देखें] (http://stackoverflow.com/q/12843132/720999) – kostix

+12

यह शायद अब उन उत्तरों की एक स्वीकार करने के लिए समय है। –

उत्तर

60

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

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

16

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

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

+0

ठीक है, मैं देखता हूं। धन्यवाद। आपने एक साफ स्पष्टीकरण दिया है – dilfish