गो में नीचे क्या अंतर है?

मैंने खोजने की कोशिश की, लेकिन मैं उनका वर्णन करने के लिए एक सही शब्द नहीं सोच सका। उन्हें आधिकारिक तौर पर कैसे कहा जाता है?

# 1 - संरचना के अंदर माता-पिता:

type MyTime struct {
    time.Time
}

#2 - जनक सही मेरे प्रकार के बाद संरचना परिभाषा के बिना:

type MyTime time.Time

#2 के लिए, मैं अपने प्रकार को किसी अन्य समय के साथ प्रारंभ कर सकता हूं। समय mt := MyTime(t) जैसा है। # 1 प्रकार को किसी अन्य समय के साथ कैसे प्रारंभ करें। समय चर?

-1
KinoP 12 फरवरी 2021, 11:20
4
गो में कोई इनहेरिटेंस नहीं है, इसलिए "गो इनहेरिटेंस सिंटैक्स" जैसी कोई चीज़ नहीं है
 – 
Flimzy
12 फरवरी 2021, 11:29
यह जानकर अच्छा लगा कि गो में कोई विरासत नहीं है। अनुपयुक्त शीर्षक के लिए क्षमा करें, लेकिन मैं इसे पाठ के लिए छोड़ दूंगा।
 – 
KinoP
12 फरवरी 2021, 11:31

1 उत्तर

सबसे बढ़िया उत्तर

गो एक वस्तु उन्मुख भाषा नहीं है, कोई प्रकार का पदानुक्रम और वंशानुक्रम नहीं है। विवरण के लिए, देखें संरचनाओं का एक जटिल पदानुक्रम बनाने के लिए गो में मुहावरेदार तरीका क्या है? और पैरेंट मेथड के बजाय एम्बेडेड स्ट्रक्चर कॉल चाइल्ड मेथड पर जाएं

आपका पहला उदाहरण एक नया प्रकार MyTime एम्बेडिंग time.Time बनाता है। एक प्रकार को एम्बेड करने से, एम्बेडेड प्रकार के सभी फ़ील्ड और तरीके प्रचारित हो जाते हैं और उपलब्ध होते हैं जैसे कि वे फ़ील्ड या एम्बेडर प्रकार के तरीके थे, उदाहरण के लिए जब आप एक इंटरफ़ेस को लागू करना चाहते हैं तो बहुत आसान है (क्योंकि प्रचारित विधियां उन्हें घोषित किए बिना "मौजूद" होंगी)।

आप इसे इस तरह इंस्टेंट कर सकते हैं (विवरण के लिए, देखें गोलंग एंबेडेड स्ट्रक्चर टाइप):

t := MyTime{Time: time.Now()}

आपका दूसरा उदाहरण एक नया प्रकार बनाता है, इससे सभी विधियां हटा दी जाएंगी। यह तब काम आता है जब आप नहीं चाहते कि मौजूदा तरीके नए प्रकार का हिस्सा बनें। इसका एक चमकदार उदाहरण String() विधि को परिभाषित करना या मार्शलिंग व्यवहार को ओवरराइड करना है जब आप अपने कार्यान्वयन में मूल व्यवहार को कॉल करना चाहते हैं, विवरण के लिए देखें कॉल json.Unmarshal इनसाइड UnmarshalJSON फंक्शन बिना स्टैक ओवरफ्लो पैदा किए। आप एक साधारण प्रकार के रूपांतरण का उपयोग करके इसका मूल्य बना सकते हैं:

t := MyTime(time.Now())
5
icza 12 फरवरी 2021, 11:26
यह जोड़ने लायक हो सकता है कि गो में कोई विरासत नहीं है। टाइप एम्बेडिंग का उपयोग करके कुछ गुणों तक पहुंचना संभव है, लेकिन बस इतना ही।
 – 
aureliar
12 फरवरी 2021, 11:26
1
हो गया, अभी भी जवाब संपादित कर रहा था।
 – 
icza
12 फरवरी 2021, 11:31