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)
:) তবে পয়েন্টার বরাদ্দ এবং সেগুলি ফেরত দেওয়ার বিভিন্ন পদ্ধতির মধ্যে আসলেই কোনও পার্থক্য নেই।