में एक प्रकार की घोषणा के साथ रैपिंग स्ट्रक्चर को बदलें, मैं अपने मानक तरीकों को परिभाषित करने में सक्षम होने के लिए गो मानक लाइब्रेरी से regexp
का विस्तार करना चाहता हूं। मैं निम्नलिखित struct का उपयोग करें:गो
type RichRegexp struct {
*regexp.Regexp
}
आप देख सकते हैं, इस struct लेकिन लिपटे regexp.Regexp
कुछ भी नहीं होता है। तो मुझे आश्चर्य है कि क्या मैं इस तरह एक सरल प्रकार घोषणा के साथ इस जगह ले सकता है:
type RichRegexp regexp.Regexp
लेकिन यह कैसे मैं निम्नलिखित समारोह तो लिखना चाहिए?
func Compile(expression string) (*RichRegexp, error) {
regex, err := regexp.Compile(expression)
if err != nil {
return nil, err
}
return &RichRegexp{regex}, nil // How to do this?
}
मैं अपने RichRegexp
को regexp.Regexp
परिवर्तित करने की कोशिश की लेकिन यह संकलन नहीं किया। एक कस्टम प्रकार को वापस करने के लिए सामान्य पैटर्न क्या है जो अंतर्निहित प्रकार को लपेटता है?
'MyRegexp (* x)' मेरे मामले में काम नहीं करता है, क्योंकि मुझे एक सूचक वापस करना है। अगर मैं 'y: = और MyRegexp (* x) 'कोशिश करता हूं' मुझे त्रुटि मिलती है 'MyRegexp (* x)' http://play.golang.org/p/HbVoAVM1RY का पता नहीं ले सकता है। – deamon
यदि आप एक पॉइंटर चाहते हैं, तो इसे 'MyRegexp' के सूचक के रूप में परिवर्तित करें:' (* MyRegexp) (x) '। ध्यान दें कि 'x' के dereferenciation के लिए अब कोई आवश्यकता नहीं है, क्योंकि अब हम पॉइंटर्स से निपट रहे हैं। अतिरिक्त सूचनाओं के लिए [spec] (http://golang.org/ref/spec#Conversions) देखें :) – nemo
आपकी स्पष्टीकरण के लिए धन्यवाद। '(* MyRegexp) (x)' क्या 'jnml' भी सुझाया गया है। – deamon