إعادة تشييد الشرائح في GO: الارتباك والوضوح
ومع ذلك ، فإن فهم تعقيداتهم يمكن أن يكون تحديًا للمبتدئين. أحد هذه الجوانب هو مفهوم إعادة التثبيت.
النظر في الكود التالي:
استيراد "FMT" Func Main () { ج: = جعل ([] int ، 5) printslice ("A" ، أ) ب: = جعل ([] int ، 0 ، 5) Printslice ("B" ، ب) ج: = ب [: 2] printslice ("C" ، ج) D: = C [2: 5] printslice ("D" ، د) } Func Printslice (S string ، x [] int) { fmt.printf ("٪ s len = ٪ d cap = ٪ d ٪ v \ n" ، S ، Len (x) ، cap (x) ، x) }package main import "fmt" func main() { a := make([]int, 5) printSlice("a", a) b := make([]int, 0, 5) printSlice("b", b) c := b[:2] printSlice("c", c) d := c[2:5] printSlice("d", d) } func printSlice(s string, x []int) { fmt.Printf("%s len=%d cap=%d %v\n", s, len(x), cap(x), x) }يقوم البرنامج بإنشاء أربع شرائح: A ، B ، C ، و D. والنتيجة المذهلة هي أن الشريحة C ، التي تم إنشاؤها كقطعة من العنصرين الأولين من B ، لها قدرة 5 بدلاً من 2.
لفهم هذا السلوك ، نحتاج إلى الخوض في مفهوم المصفوفات الأساسية . في GO ، لا تخزن الشرائح البيانات الفعلية ؛ بدلا من ذلك ، يشيرون إلى صفيف أساسي. عند إنشاء شريحة ، يشير إلى جزء من هذه المجموعة الأساسية. . عند إنشاء Slice C من B ، يصبح نافذة على العنصرين الأولين من B. ومع ذلك ، فإن الصفيف الأساسي وبالتالي قدرة C لا تزال 5 ، والتي تتضمن فتحات غير مستخدمة في b.
رئيسي() { ب: = جعل ([] int ، 0 ، 5) ج: = ب [: 2] D: = C [1: 5] // هذا يعادل D: = B [1: 5] D [0] = 1 printslice ("C" ، ج) printslice ("D" ، د) }
في هذه الحالة ، يعدل قيمة D أيضًا قيمة C ، مما يدل على أن C و D مجرد نوافذ مختلفة على نفس الصفيف الأساسي. التقطيع أمر بالغ الأهمية للعمل بفعالية مع شرائح في GO. يتيح لك إنشاء شرائح تتكيف ديناميكيًا مع أحجام البيانات المختلفة دون الحاجة إلى نسخ أو إعادة تخصيص الذاكرة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3