क्या एम्बेडेड structs का उपयोग किये बिना किसी प्रकार के तरीकों का उत्तराधिकारी संभव है?गोलांग एम्बेडेड संरचना
कोड के पहले स्निपेट कोड कि Node
में Property
struct एम्बेड करता है काम कर रहा है और मैं node.GetString
Properties
पर एक विधि है कि फोन करने में सक्षम हूँ। मुझे इस बारे में पसंद नहीं है जब मैं Node
शुरू करता हूं, मेरे पास Properties
संरचना को आरंभ करने के लिए (?) है। क्या इसके चारों ओर एक रास्ता है?
package main
import "fmt"
type Properties map[string]interface{}
func (p Properties) GetString(key string) string {
return p[key].(string)
}
type Nodes map[string]*Node
type Node struct {
*Properties
}
func main() {
allNodes := Nodes{"1": &Node{&Properties{"test": "foo"}}} // :'(
singleNode := allNodes["1"]
fmt.Println(singleNode.GetString("test"))
}
आखिरकार, मैं निम्नलिखित की तरह कुछ करना चाहता हूं। जहां Node
टाइप Properties
है और प्रारंभ में Property
संरचना को प्रारंभ करने की आवश्यकता नहीं है। निम्नलिखित कोड काम नहीं करता है लेकिन यह स्पष्ट हो सकता है कि मेरा लक्ष्य क्या है।
package main
import "fmt"
type Properties map[string]interface{}
func (p Properties) GetString(key string) string {
return p[key].(string)
}
type Nodes map[string]*Node
type Node Properties
func main() {
allNodes := Nodes{"1": &Node{"test": "foo"}} // :)
singleNode := allNodes["1"]
fmt.Println(singleNode.GetString("test")) // :D
}
मैं और अधिक structs कि
Properties
के तरीकों जिसके कारण मैं पूछ रहा हूँ का उपयोग करेगा जोड़ने होंगे
। अगर मेरे पास केवल Node
था, तो मेरे पास Node
के लिए विधियां होंगी और किया जाएगा। लेकिन क्योंकि मैं एक से अधिक Node
होगा मैं यह सब structs एम्बेड कि Properties
मैं सटीक समस्या के लिए और अधिक लगता है बिना, मैं Node
से Properties
तरीकों का उपयोग करना चाहते हैं एक ही तरीके से जोड़ने के लिए एक तरह से बेमानी लगता है Properties
आरंभ करें।
मुझे लगता है जैसे आप शायद उन कार्यों को लिख सकते हैं जो 'Properties' ऑब्जेक्ट का उदाहरण स्वीकार करते हैं और इसे संलग्न करने के बजाय इसे संचालित करते हैं। इस प्रकार गो में एम्बेडिंग कैसे काम करती है ... इसलिए मुझे यकीन नहीं है कि इसके चारों ओर एक रास्ता है। संरचना, विरासत नहीं। –
एम्बेडिंग को किसी कारण के लिए एम्बेडिंग कहा जाता है;) सभी गुण फ़ील्ड नोड में एम्बेडेड हो जाते हैं। – kostya