गो में struct
वैल्यू या स्लाइस को वापस करने के विभिन्न तरीके हैं। मैंने जिन व्यक्तियों को देखा है, उनके लिए:
type MyStruct struct {
Val int
}
func myfunc() MyStruct {
return MyStruct{Val: 1}
}
func myfunc() *MyStruct {
return &MyStruct{}
}
func myfunc(s *MyStruct) {
s.Val = 1
}
मुझे इनमें अंतर समझ में आता है। पहला संरचना की एक प्रति लौटाता है, दूसरा फ़ंक्शन के भीतर बनाए गए संरचना मूल्य के लिए एक संकेतक, तीसरा उम्मीद करता है कि मौजूदा संरचना को पारित किया जाए और मूल्य को ओवरराइड किया जाए।
मैंने देखा है कि इन सभी पैटर्नों का उपयोग विभिन्न संदर्भों में किया जाता है, मैं सोच रहा हूं कि इन सबसे अच्छा व्यवहार क्या है। आप कब उपयोग करेंगे? उदाहरण के लिए, पहली छोटी संरचना के लिए ठीक हो सकती है (क्योंकि ओवरहेड न्यूनतम है), दूसरे के लिए बड़ा। और तीसरा यदि आप अत्यंत स्मृति कुशल होना चाहते हैं, क्योंकि आप कॉल के बीच एक एकल संरचना का आसानी से पुन: उपयोग कर सकते हैं। क्या उपयोग करने के लिए कोई सर्वोत्तम प्रथाएं हैं?
इसी तरह, स्लाइस के बारे में एक ही सवाल:
func myfunc() []MyStruct {
return []MyStruct{ MyStruct{Val: 1} }
}
func myfunc() []*MyStruct {
return []MyStruct{ &MyStruct{Val: 1} }
}
func myfunc(s *[]MyStruct) {
*s = []MyStruct{ MyStruct{Val: 1} }
}
func myfunc(s *[]*MyStruct) {
*s = []MyStruct{ &MyStruct{Val: 1} }
}
फिर से: यहां सबसे अच्छी प्रथाएं क्या हैं। मुझे पता है कि स्लाइस हमेशा संकेत होते हैं, इसलिए एक सूचक को एक स्लाइस में वापस करना उपयोगी नहीं होता है। हालांकि, क्या मुझे संरचनात्मक मूल्यों का एक टुकड़ा, संरक्षकों को संकेत का एक टुकड़ा लौटना चाहिए, क्या मुझे एक सूचक को तर्क के रूप में एक टुकड़ा ( गो ऐप इंजन एपीआई में प्रयुक्त पैटर्न ) में पास करना चाहिए?
new(MyStruct)
:) लेकिन संकेत आवंटित करने और उन्हें वापस करने के विभिन्न तरीकों के बीच वास्तव में कोई अंतर नहीं है।