পয়েন্টারগুলি বিভিন্ন কারণে কার্যকর f পয়েন্টারগুলি মেমরি লেআউটের উপর নিয়ন্ত্রণের অনুমতি দেয় (সিপিইউ ক্যাশেটির কার্যকারিতা প্রভাবিত করে)। গো-তে আমরা এমন একটি কাঠামো সংজ্ঞায়িত করতে পারি যেখানে সমস্ত সদস্যের সাবলীল স্মৃতি থাকে:
type Point struct {
x, y int
}
type LineSegment struct {
source, destination Point
}
এই ক্ষেত্রে Point
স্ট্রাকচারগুলি LineSegment
স্ট্রাক্টের মধ্যে এমবেড করা হয় । তবে আপনি সবসময় সরাসরি ডেটা এম্বেড করতে পারবেন না। আপনি যদি বাইনারি গাছ বা লিঙ্কযুক্ত তালিকার মতো কাঠামোগুলিকে সমর্থন করতে চান তবে আপনাকে কোনও ধরণের পয়েন্টার সমর্থন করতে হবে।
type TreeNode {
value int
left *TreeNode
right *TreeNode
}
জাভা, পাইথন ইত্যাদিতে এই সমস্যা নেই কারণ এটি আপনাকে সম্মিলিত প্রকারের এম্বেড করার অনুমতি দেয় না, তাই এম্বেডিং এবং পয়েন্টিংয়ের মধ্যে সিন্টেক্সিকভাবে আলাদা করার প্রয়োজন নেই no
সুইফট / সি # স্ট্র্ট সহ সমস্যাগুলি পয়েন্টারগুলির সাথে সমাধান করা হয়েছে
এটি সম্পাদন করার একটি সম্ভাব্য বিকল্প হ'ল সি # এবং সুইফ্টের মধ্যে struct
এবং এর মধ্যে পার্থক্য করা class
। তবে এর সীমাবদ্ধতা আছে। আপনি সাধারণত উল্লেখ করতে পারেন যে স্ট্রাক্ট inout
অনুলিপি করা এড়াতে কোনও ফাংশন একটি প্যারামিটার হিসাবে স্ট্রাক্ট নেয় , এটি আপনাকে স্ট্রাক্টসে রেফারেন্স (পয়েন্টার) সংরক্ষণ করার অনুমতি দেয় না। এর অর্থ আপনি যখন কোনও পুলকে বরাদ্দকারী তৈরি করতে (যেমন নীচে দেখুন) দরকারী দরকারী পান তখন আপনি কোনও কাঠামোটিকে কখনই রেফারেন্স টাইপ হিসাবে ব্যবহার করতে পারবেন না।
কাস্টম মেমোরি বরাদ্দকারী
পয়েন্টার ব্যবহার করে আপনি নিজের পুল বরাদ্দকারীও তৈরি করতে পারেন (কেবলমাত্র নীতিটি দেখানোর জন্য মুছে ফেলা প্রচুর চেকের সাহায্যে এটি খুব সরলীকৃত):
type TreeNode {
value int
left *TreeNode
right *TreeNode
nextFreeNode *TreeNode;
}
var pool [1024]TreeNode
var firstFreeNode *TreeNode = &pool[0]
func poolAlloc() *TreeNode {
node := firstFreeNode
firstFreeNode = firstFreeNode.nextFreeNode
return node
}
func freeNode(node *TreeNode) {
node.nextFreeNode = firstFreeNode
firstFreeNode = node
}
দুটি মান অদলবদল করুন
পয়েন্টারগুলি আপনাকে প্রয়োগ করতেও দেয় swap
। এটি দুটি ভেরিয়েবলের মান অদলবদল করে:
func swap(a *int, b *int) {
temp := *a
*a = *b
*b = temp
}
উপসংহার
গুগলের মতো জায়গাগুলিতে সিস্টেমে প্রোগ্রামিংয়ের জন্য জাভা কখনই সি ++ পুরোপুরি প্রতিস্থাপন করতে সক্ষম হয়নি, কিছু অংশে কারণ মেমরির লেআউট এবং ব্যবহার নিয়ন্ত্রণের দক্ষতার অভাবের কারণে পারফরম্যান্স একই প্রসারিত হতে পারে না (ক্যাশে মিস করে পারফরম্যান্সকে প্রভাবিত করে)। গো অনেক ক্ষেত্রে সি ++ প্রতিস্থাপনের লক্ষ্য নিয়েছে এবং সুতরাং পয়েন্টারগুলিকে সমর্থন করা দরকার।