यह:
type Form Rectangle
एक नईForm
नामित प्रकार बनाता है, Rectangle
अपने अंतर्निहित प्रकार के रूप में हो रही है।
इसका मतलब है कि Rectangle
(जो एक संरचना है) के क्षेत्र Form
के लिए भी परिभाषित किए जाएंगे।
लेकिन विधियां एक विशिष्ट प्रकार से बंधी हुई हैं। जब आप एक नया प्रकार (Form
) बनाते हैं, तो उस नए प्रकार में इसके अंतर्निहित प्रकार की कोई भी विधि नहीं होगी, इसलिए आप c.SomethingElse()
को SomethingElse()
पर कॉल नहीं कर सकते हैं Rectangle
प्रकार का एक तरीका है।
c.Circle.Something()
काम करता है, क्योंकि c.Circle
प्रकार Circle
का एक क्षेत्र है, और Something()
Circle
प्रकार का एक तरीका है।
यदि आप Rectangle.SomethingElse()
विधि को कॉल करना चाहते हैं, तो Rectangle
(रिसीवर प्रकार Rectangle
) का मान आवश्यक है। चूंकि Form
के अंतर्निहित प्रकार Rectangle
है, तो आप बस प्रकार Rectangle
का एक मान प्रकार Form
के एक मूल्य से एक सरल प्रकार conversion का उपयोग कर प्राप्त कर सकते हैं:
Rectangle(c).SomethingElse() // This works
एक नए प्रकार बनाने के लाभ है कि ताकि आप बना सकते हैं/इसके लिए अपनी खुद की विधियां जोड़ें। एक आम उदाहरण sort.Interface
इंटरफ़ेस को कार्यान्वित कर रहा है। मान लें कि आपके पास कुछ का टुकड़ा है, उदा। []Rectangle
, या किसी प्रकार का एक टुकड़ा जिस पर आपका कोई नियंत्रण नहीं है (क्योंकि यह किसी अन्य पैकेज का हिस्सा है - और किसी प्रकार के तरीकों को केवल उसी पैकेज में परिभाषित किया जा सकता है)। आप इस टुकड़ा क्रमबद्ध करना चाहते हैं, तो आप एक नए प्रकार है जिसके लिए आप तरीकों को परिभाषित कर सकते, sort.Interface
के तरीकों, उदा .:
type SortRectangle []Rectangle
func (s SortRectangle) Len() int { return len(s) }
func (s SortRectangle) Less(i, j int) bool { return s[i] <some-logic> s[j] }
func (s SortRectangle) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
sort.Sort()
समारोह किसी भी मान कि sort.Interface
लागू सॉर्ट करने के लिए सक्षम है बनाएँ। []Rectangle
नहीं है, लेकिन हमने अभी एक नया प्रकार SortRectangle
बनाया है जो करता है।और यदि हमारे पास []Rectangle
प्रकार का मान है, तो हम इसे SortRectangle
में परिवर्तित कर सकते हैं क्योंकि पूर्व उत्तरार्द्ध का अंतर्निहित प्रकार है, और रूपांतरण करके, हमारे पास SortRectangle
प्रकार का मान है जिसे sort.Sort()
पर भेजा जा सकता है यह हल कर दिया है:
rs := []Rectangle{}
// Sort rs:
sort.Sort(SortRectangle(rs))
ध्यान दें कि ऊपर SortRectangle(rs)
ऐसे रूपांतरण केवल क्रम प्रकार की जानकारी बदल जाता है, यह rs
की स्मृति प्रतिनिधित्व नहीं बदलता है, तो यह pefectly सुरक्षित और कुशल है।
यदि आप नए प्रकार को "पुराने" प्रकार के तरीकों के बारे में चाहते हैं, तो एम्बेडिंग का उपयोग करें। ऐनार-जी का जवाब देखें। प्रकार Rectangle
एक विधि Something()
है, क्योंकि Something()
Circle
की एक विधि है: वास्तव में, आप पहले से ही इस Rectangle
में Circle
एम्बेड करके किया
Rectangle{}.Something() // Prints "something"
महान स्पष्टीकरण के लिए Thx! – simplebird