"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف تتصرف إعادة التثبيت مع المصفوفات الأساسية في شرائح Go؟

كيف تتصرف إعادة التثبيت مع المصفوفات الأساسية في شرائح Go؟

نشر في 2025-02-06
تصفح:724

How Does Re-slicing Behave with Underlying Arrays in Go Slices?

إعادة تشييد الشرائح في 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