گولانگ میں عکاسی کیا ہے؟

Gwlang My Kasy Kya



گولانگ میں عکاسی پروگرام کو رن ٹائم کے وقت ڈیٹا ڈھانچے، اقسام اور اقدار کی جانچ اور ترمیم کرنے کی اجازت دیتی ہے۔ یہ فنکشنز کا ایک سیٹ فراہم کرتا ہے جو ہمیں رن ٹائم کے وقت کسی بھی متغیر کی قسم اور قدر کا جائزہ لینے، اقسام کی نئی مثالیں بنانے اور موجودہ متغیرات کی قدر میں ترمیم کرنے کی اجازت دیتا ہے۔ یہ مضمون عکاس پیکج میں گولانگ کے مختلف افعال کا احاطہ کرتا ہے۔

فہرست کا خانہ

گو ایک مستحکم طور پر ٹائپ کی گئی زبان ہے لہذا مرتب کے وقت متغیر کی قسم معلوم ہونی چاہیے۔ تاہم، بعض منظرناموں میں، ان اقدار کو سنبھالنا ضروری ہو سکتا ہے جن کی اقسام کا تعین اس وقت تک نہیں کیا جا سکتا جب تک کہ پروگرام کو مکمل نہ کیا جائے۔







مثال کے طور پر، ہمیں ایک فنکشن لکھنے کی ضرورت ہو سکتی ہے جو مختلف قسم کے دلائل کے ساتھ کام کر سکے، یا ہمیں نامعلوم اقسام کے ڈیٹا کو سیریلائز اور ڈی سیریلائز کرنے کی ضرورت پڑ سکتی ہے۔ یہ وہ جگہ ہے جہاں گولانگ میں عکاسی پیکیج استعمال ہوتا ہے۔



گو میں پیکیج کی عکاسی کریں۔

عکاسی پیکیج فنکشنز کا ایک سیٹ فراہم کرتا ہے جو ہمیں رن ٹائم کے وقت اقدار کا معائنہ کرنے اور ان میں تبدیلی کرنے کی اجازت دیتا ہے، چاہے ان کی اقسام کچھ بھی ہوں۔ ان افعال کے ساتھ، ہم کسی بھی متغیر کی قسم اور قدر کے بارے میں معلومات حاصل کر سکتے ہیں، اقسام کی نئی مثالیں بنا سکتے ہیں، اور موجودہ متغیرات کی قدر میں ترمیم کر سکتے ہیں۔



گولانگ میں عکاسی پیکیج دو قسموں پر مشتمل ہے: قسم اور قدر۔ ایک قسم گو قسم کی نمائندگی کرتی ہے، جیسے int، سٹرنگ، یا اپنی مرضی کے مطابق ڈھانچہ۔ قدر ایک مخصوص قسم کی قدر کی نمائندگی کرتی ہے، جیسے 42 یا 'ہیلو'۔





عکاسی پیکیج فنکشنز کا ایک سیٹ بھی فراہم کرتا ہے جو ہمیں متغیرات سے قسم اور قدر والی اشیاء حاصل کرنے کی اجازت دیتا ہے۔ مثال کے طور پر، reflect.TypeOf() فنکشن ایک Type آبجیکٹ کو لوٹاتا ہے جو متغیر کی قسم کی نمائندگی کرتا ہے، جبکہ reflect.ValueOf() فنکشن ایک ویلیو آبجیکٹ دیتا ہے جو متغیر کی قدر کو ظاہر کرتا ہے۔

مندرجہ ذیل حصوں میں، ہم عکاسی پیکج میں عام طور پر استعمال ہونے والے کچھ فنکشنز کو تلاش کریں گے۔



reflect.Copy() فنکشن

عکاس پیکج کی عکاسی کاپی () فنکشن ایک سلائس کی قدروں کو دوسرے سلائس میں کاپی کرنے کے لیے استعمال کیا جاتا ہے۔ یہ دو پیرامیٹرز لیتا ہے، dst، اور src، دونوں کو ایک ہی عنصر کی قسم کے ساتھ سلائس ویلیو ہونا چاہیے۔ فنکشن src سلائس سے اقدار کو dst سلائس میں کاپی کرتا ہے اور کاپی کیے گئے عناصر کی تعداد لوٹاتا ہے۔

reflect.Copy() فنکشن کو مندرجہ ذیل مثال میں دکھایا گیا ہے۔

پیکج مرکزی

درآمد (

'fmt'
'عکاسی'
)
func مرکزی () {
src := [ ] int { 1 , 2 , 3 , 4 , 5 }
ڈی ایس ٹی := بنانا ([] int , صرف ( src ))
n := عکاسی . کاپی ( عکاسی . کی قدر ( ڈی ایس ٹی ) عکاسی . کی قدر ( src ))
ایف ایم ٹی . پرنٹ ایل این ( n ) // آؤٹ پٹ: 5
ایف ایم ٹی . پرنٹ ایل این ( ڈی ایس ٹی ) // آؤٹ پٹ: [1 2 3 4 5]


}

اس مثال میں، ہم کچھ عددی اقدار کے ساتھ ایک سورس سلائس src، اور src کے برابر لمبائی کے ساتھ ڈیسٹینیشن سلائس dst بناتے ہیں۔ اس کے بعد ہم src سے dst میں اقدار کو کاپی کرنے کے لیے reflect.Copy() کو کال کرتے ہیں اور کاپی کیے گئے عناصر کی تعداد (n) اور dst سلائس کے مواد کو پرنٹ کرتے ہیں۔

reflect.DeepEqual() فنکشن

عکاسی پیکج کا reflect.DeepEqual() فنکشن مساوات کے لیے دو قدروں کا موازنہ کرنے کے لیے استعمال ہوتا ہے۔ اس فنکشن میں دو ان پٹ پیرامیٹرز ہیں جو a اور b ہیں، یہ دونوں کسی بھی قسم کی قدر کے ہو سکتے ہیں۔ فنکشن درست لوٹاتا ہے اگر a اور b گہرے طور پر برابر ہیں، مطلب یہ ہے کہ ان کی بنیادی قدریں بار بار برابر ہیں۔ ورنہ یہ جھوٹا نکلے گا۔

مندرجہ ذیل مثال ظاہر کرتی ہے کہ کس طرح reflect.DeepEqual():

پیکج مرکزی

درآمد (

'fmt'
'عکاسی'
)
func مرکزی () {
a := [ ] int { 1 , 2 , 3 }
ب := [ ] int { 1 , 2 , 3 }
اگر عکاسی . گہری مساوی ( a , ب ) {
ایف ایم ٹی . پرنٹ ایل این ( 'a اور b برابر ہیں' )
} اور {
ایف ایم ٹی . پرنٹ ایل این ( 'a اور b برابر نہیں ہیں' )
}


}

اس مثال میں، ہم ایک ہی عددی اقدار کے ساتھ دو سلائسیں a اور b بناتے ہیں۔ پھر ہم مساوات کے لیے a اور b کا موازنہ کرنے اور نتیجہ پرنٹ کرنے کے لیے reflect.DeepEqual() کہتے ہیں۔

reflect.Swapper() فنکشن

عکاسی پیکج کا عکاس. سویپر() فنکشن ایک فنکشن کو واپس کرنے کے لیے استعمال کیا جاتا ہے جو سلائس کے عناصر کو تبدیل کر سکتا ہے۔ یہ ایک واحد پیرامیٹر لیتا ہے، v، جو ایک سلائس ویلیو ہونا چاہیے۔ فنکشن ایک ایسا فنکشن لوٹاتا ہے جو دو عددی پیرامیٹرز، i اور j لیتا ہے، اور سلائس کے عناصر کو i اور j پوزیشنوں پر تبدیل کرتا ہے۔

reflect.Swapper() کے استعمال کو درج ذیل مثال کے ذریعے ظاہر کیا جا سکتا ہے۔

پیکج مرکزی

درآمد (

'fmt'
'عکاسی'
)
func مرکزی () {
s := [ ] int { 1 , 2 , 3 , 4 , 5 }
تبادلہ := عکاسی . سویپر ( s )
تبادلہ ( 1 , 3 )
ایف ایم ٹی . پرنٹ ایل این ( s ) // آؤٹ پٹ: [1 4 3 2 5]


}

اس مثال میں، ہم نے کچھ عددی اقدار کے ساتھ s نامی ایک سلائس بنایا ہے۔ اس کے بعد ہم ایک فنکشن سویپ حاصل کرنے کے لیے reflect.Swapper() کو کال کرتے ہیں جو سلائس کے عناصر کو تبدیل کر سکتا ہے۔ ہم s سلائس کی پوزیشن 1 اور 3 پر عناصر کو تبدیل کرنے کے لیے سویپ کا استعمال کرتے ہیں اور نتیجہ پرنٹ کرتے ہیں۔

reflect.TypeOf() فنکشن

Reflect.TypeOf() کسی قدر کی قسم حاصل کرنے کے لیے استعمال ہوتا ہے۔ یہ فنکشن ایک واحد پیرامیٹر 'v' کو قبول کرتا ہے جو کسی بھی قسم یا قدر کا ہو سکتا ہے۔ فنکشن ایک reflect.Type قدر لوٹاتا ہے جو قدر کی قسم کو ظاہر کرتا ہے۔

reflect.TypeOf() کے استعمال کو درج ذیل مثال کے ذریعے ظاہر کیا جا سکتا ہے۔

پیکج مرکزی

درآمد (

'fmt'
'عکاسی'
)
func مرکزی () {
تھا ایکس float64 = 3 . 14
t := عکاسی . کی قسم ( ایکس )
ایف ایم ٹی . پرنٹ ایل این ( t ) // آؤٹ پٹ: float64


}

اس مثال میں، ہم 3.14 ویلیو کے ساتھ ایک float64 متغیر x بناتے ہیں۔ اس کے بعد ہم x کی قسم حاصل کرنے کے لیے reflect.TypeOf() کو کال کرتے ہیں اور نتیجہ کو عکاسی میں محفوظ کرتے ہیں۔ متغیر ٹی ٹائپ کریں۔ ہم t کی ویلیو پرنٹ کرتے ہیں جو کہ float64 ہے۔

reflect.ValueOf() فنکشن

reflect.ValueOf() کسی قدر کی عکاسی. قدر کی نمائندگی حاصل کر سکتا ہے۔ یہ ایک واحد پیرامیٹر وی لیتا ہے، جو کسی بھی قسم کی قدر ہو سکتی ہے۔ فنکشن ایک عکاسی کی قدر واپس کرتا ہے جو ان پٹ پیرامیٹر کی قدر کو ظاہر کرتا ہے۔

reflect.ValueOf() کے استعمال کو درج ذیل مثال کے ذریعے ظاہر کیا جا سکتا ہے۔

پیکج مرکزی

درآمد (

'fmt'
'عکاسی'
)
func مرکزی () {
تھا ایکس float64 = 3 . 14
میں := عکاسی . کی قدر ( ایکس )
ایف ایم ٹی . پرنٹ ایل این ( میں ) // آؤٹ پٹ: 3.14

}

اس مثال میں، ہم 3.14 ویلیو کے ساتھ ایک float64 متغیر x بناتے ہیں۔ اس کے بعد ہم x کی عکاسی والی قیمت کی نمائندگی حاصل کرنے کے لیے reflect.ValueOf() کو کال کرتے ہیں اور نتیجہ کو ایک عکاسی قدر متغیر v میں محفوظ کرتے ہیں۔ ہم v کی قدر پرنٹ کرتے ہیں، جو کہ 3.14 ہے۔

عکاسی پیکیج مذکور سے ہٹ کر متعدد افعال فراہم کرتا ہے، اور یہ صرف چند مثالیں ہیں۔ عکاسی پیکج کی طرف سے فراہم کردہ فنکشنز کا استعمال کرتے ہوئے، ہم کوڈ بنا سکتے ہیں جو کسی بھی قسم کی اقدار کے ساتھ کام کر سکتا ہے، تالیف کے وقت قسم کو جاننے کی ضرورت کے بغیر۔

نتیجہ

گولانگ میں عکاسی پروگرام کو رن ٹائم کے وقت ڈیٹا ڈھانچے، اقسام اور اقدار کی جانچ اور ترمیم کرنے کی اجازت دیتی ہے۔ یہ عکاسی پیکج کے ذریعے لاگو کیا جاتا ہے، جو اقسام اور اقدار کا معائنہ کرنے اور ان میں ہیرا پھیری کرنے کے فنکشن فراہم کرتا ہے۔ عکاسی خاص طور پر اس وقت مفید ہے جب انٹرفیس، نامعلوم اقسام کے ساتھ کام کریں، یا جب آپ کو عام افعال کو نافذ کرنے کی ضرورت ہو۔ اس مضمون نے گولانگ میں عکاسی کی بنیادی باتوں پر تبادلہ خیال کیا، بشمول عکاس پیکج، عکاسی کی قسم اور قدر، اور متحرک قسم اور قدر۔