ماڈیول اسباق (1/5)
فکسڈ لمبائی کی صفیں۔
گو میں ایک سری کی ایک مقررہ لمبائی ہوتی ہے، جسے اس کی قسم میں پکایا جاتا ہے: [N]T۔
یہ ایک قدیم ہے جو شاذ و نادر ہی براہ راست ایپلیکیشن کوڈ میں استعمال ہوتا ہے — آپ کریں گے۔
تقریباً ہمیشہ سلائسز (اگلا سبق) کے ساتھ کام کریں، جو متحرک ہیں۔
صفوں پر مناظر۔
پھر بھی، صفوں کو اچھی طرح سمجھنا ضروری ہے: گو میں ہر چیز بنائی گئی ہے۔ ان کے اوپر.
اعلان اور ابتدا
var a [3]int = [3]int{10, 20, 30}
b := [3]int{1, 2, 3} // inference with :=
c := [3]int{} // all zero: [0, 0, 0]
d := [...]int{1, 2, 3, 4} // length inferred = 4ایک صف کی صفر قدر ہر کے ساتھ اعلان کردہ لمبائی کی ایک صف ہے۔ عنصر اپنی صفر قدر پر:
var nums [5]int // [0 0 0 0 0]اشاریہ سازی اور len
a := [3]int{10, 20, 30}
fmt.Println(a[0]) // 10
a[1] = 99
fmt.Println(len(a)) // 3حد سے باہر رسائی رن ٹائم گھبراہٹ کا سبب بنتی ہے (خاموش غیر متعین نہیں۔ جیسے C میں)۔
لمبائی قسم کا حصہ ہے۔
var a [3]int
var b [4]int
// a = b // ERROR: different types[3]int اور [4]int مختلف قسمیں ہیں، حالانکہ دونوں ہی رکھتے ہیں
int یہی وجہ ہے کہ صفوں کو شاذ و نادر ہی افعال میں منتقل کیا جاتا ہے: آپ کو کرنا پڑے گا۔
پیرامیٹر کی قسم میں لمبائی کو ہارڈ کوڈ کریں۔
قدر کے لحاظ سے کاپی کریں۔
سلائسس (حوالہ) اور نقشے (حوالہ) کے برعکس، صفوں کو ** کے ذریعے کاپی کیا جاتا ہے۔ قدر**:
a := [3]int{1, 2, 3}
b := a // copy
b[0] = 99
fmt.Println(a[0]) // 1 — a is unchangedکسی فنکشن کو پاس کرتے وقت بھی یہی لاگو ہوتا ہے: فنکشن اسے وصول کرتا ہے۔ اپنی کاپی.
arrays کب استعمال کریں؟
- مقررہ سائز کے بفر جو مرتب وقت پر معلوم ہوتے ہیں (جیسے
[16]byteMD5 کے لیے)۔ - جامع نقشہ کی چابیاں (سلائسز "موازنہ" نہیں ہیں، صفیں ہیں)۔
- انتہائی کارکردگی (کوئی سمت نہیں، کیشے کے موافق)۔
99% کوڈ کے لیے: سلائسیں استعمال کریں۔
اسے آزمائیں
10، 20، 30 اقدار کے ساتھ 3 انٹس کی ایک صف کے طور پر اعلان کریں اور اس کی لمبائی پرنٹ کریں۔
اشارہ دکھائیں۔
صف کا لغوی: `[3]int{a, b, c}`۔
3 کوششوں کے بعد حل دستیاب ہے۔
بی کو 5 انٹس (تمام صفر) کی صف کے طور پر قرار دیں اور 99 کو پوزیشن 2 پر تفویض کریں۔
اشارہ دکھائیں۔
`var b [5]int` [0 0 0 0 0] سے شروع ہوتا ہے۔
3 کوششوں کے بعد حل دستیاب ہے۔
کیا [3]int اور [4]int ایک ہی قسم ہے؟
var a [3]int
var b [4]int
// a = b ?Recap
[N]T: مقررہ لمبائی، قسم کا حصہ۔- صفر قدر: ہر عنصر اپنی صفر قدر پر۔
[...]int{...}کمپائلر کو لمبائی کا اندازہ لگانے دیتا ہے۔- قدر کے لحاظ سے کاپی کریں (اندرونی افعال سمیت)۔
- حد سے باہر = گھبراہٹ، غیر وضاحتی نہیں۔
- عملی طور پر، سلائسز کا استعمال کریں، جو صفوں پر آراء ہیں۔