मैं अपनी लाइब्रेरी में विधियों के साथ आधार संरचना प्रदान करना चाहता हूं जिसे 'विस्तारित' किया जा सकता है।गोलांग और विरासत
इस आधार संरचना के तरीके विस्तारित संरचना से विधियों पर भरोसा करते हैं। यह गो में सीधे संभव नहीं है, क्योंकि स्ट्रक्चर विधियों के पास केवल मूलभूत structs के लिए structs के अपने क्षेत्र में acces है।
बिंदु यह कार्यक्षमता है कि मुझे प्रत्येक विस्तारित कक्षा में दोहराना नहीं है।
मैं इस पैटर्न के साथ आया हूं, जो ठीक काम करता है, लेकिन इसकी चक्रीय संरचना के कारण काफी दृढ़ दिखता है।
मुझे अन्य गो कोड में ऐसा कुछ भी नहीं मिला है। क्या यह बहुत ही अनजान है? मैं क्या अलग दृष्टिकोण ले सकता हूं?
type MyInterface interface {
SomeMethod(string)
OtherMethod(string)
}
type Base struct{
B MyInterface
}
func (b *Base) SomeMethod(x string) {
b.B.OtherMethod(x)
}
type Extender struct {
Base
}
func (b *Extender) OtherMethod(x string) {
// Do something...
}
func NewExtender() *Extender {
e := Extender{}
e.Base.B = &e
return &e
}
यह कहना मुश्किल है कि आप एक सामान्य उदाहरण से क्या कर रहे हैं, लेकिन यह नहीं है बेवकूफ जाओ कोड। आम तौर पर, आपको कक्षाओं और विरासत के माध्यम से समाधान के बारे में सोचने से बचने की ज़रूरत है। अपने लाभ के लिए रचना का प्रयोग करें, और याद रखें कि सब कुछ एक इंटरफ़ेस द्वारा प्रतिनिधित्व की जाने वाली संरचना नहीं होने की आवश्यकता है - कभी-कभी फ़ंक्शंस की आपको आवश्यकता होती है। – JimB
अपने समाधान को दोबारा डिजाइन करें। जाओ कोई विरासत नहीं है। जो गो सबसे अधिक संभावना प्रदान करता है उसके साथ विरासत को फिर से हटाने की कोशिश कर रहा है। – Volker
समझ में नहीं आता कि आप क्यों नीचे जा रहे हैं; आपने पूछा कि क्या यह एक उचित दृष्टिकोण था, और यदि नहीं, तो आप इसे बेहतर बनाने के लिए क्या कर सकते हैं। अजीब लड़के की तरह दिखने के जोखिम पर, मुझे लगता है कि आपका प्रश्न ठीक है। ऐसा कहा जा रहा है कि, मेरे ऊपर दो टिप्पणीकारों ने इसे जगह पर मारा। –