دروس الوحدة (1/5)
صفائف ذات طول ثابت
في Go، مصفوفة لها طول ثابت، مضمنة في نوعها: [N]T.
إنها بدائية نادرًا ما تُستخدم مباشرة في كود التطبيق — سوف تفعل ذلك
تعمل دائمًا تقريبًا مع الشرائح (الدرس التالي)، والتي تكون ديناميكية
وجهات النظر على المصفوفات.
ومع ذلك، فإن فهم المصفوفات بشكل جيد أمر ضروري: فكل شيء في Go مبني على رأسهم.
الإعلان والتهيئة
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يؤدي الوصول خارج النطاق إلى حدوث ذعر في وقت التشغيل (وليس حالة غير محددة صامتة كما في ج).
الطول جزء من النوع
var a [3]int
var b [4]int
// a = b // ERROR: different types[3]int و[4]int هما نوعان متميزان، على الرغم من أن كلاهما يحملان
محمي_INLINE_5. ولهذا السبب نادرًا ما يتم تمرير المصفوفات إلى الوظائف: يجب عليك القيام بذلك
رمز الثابت الطول في نوع المعلمة.
نسخ حسب القيمة
على عكس الشرائح (المرجع) والخرائط (المرجع)، يتم **نسخ المصفوفات بواسطة القيمة **:
a := [3]int{1, 2, 3}
b := a // copy
b[0] = 99
fmt.Println(a[0]) // 1 — a is unchangedوينطبق الشيء نفسه عند التمرير إلى دالة: تستقبل الدالة ملفها نسخة خاصة.
متى تستخدم المصفوفات؟
- المخازن المؤقتة ذات الحجم الثابت المعروفة في وقت الترجمة (على سبيل المثال
[16]byteلـ MD5). - مفاتيح الخريطة المركبة (الشرائح ليست "قابلة للمقارنة"، والمصفوفات كذلك).
- الأداء الفائق (بدون مواربة، وذاكرة التخزين المؤقت ودية).
بالنسبة إلى 99% من الكود: استخدم الشرائح.
جربه
قم بتعريف a كصفيف من 3 ints بالقيم 10، 20، 30 وطباعة طوله.
إظهار التلميح
المصفوفة الحرفية: `[3]int{a, b, c}`.
الحل متاح بعد 3 من المحاولات
قم بتعريف b كمصفوفة مكونة من 5 ints (جميعها صفر) وقم بتعيين 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 ?خلاصة
[N]T: الطول الثابت، جزء من النوع.- القيمة الصفرية: كل عنصر عند قيمته الصفرية.
[...]int{...}يتيح للمترجم استنتاج الطول.- نسخ حسب القيمة (بما في ذلك الوظائف الداخلية).
- خارج النطاق = الذعر، وليس غير محدد.
- عمليًا، استخدم الشرائح، وهي طرق عرض على المصفوفات.