في Go، تقبل الوظائف المتنوعة عددًا غير محدد من الوسائط من نوع معين. عند تمرير شريحة من الشرائح إلى مثل هذه الوظيفة، من الضروري فهم آليات تحويل النوع والتفريغ المعنية.
إذا كانت الشريحة تحتوي على عناصر من نفس نوع المعلمة المتغيرة، فيمكن تمرير الشريحة دون تفريغ. ومع ذلك، إذا كانت الشريحة تحتوي على خليط من الأنواع أو الشرائح داخل الشرائح، يصبح الوضع أكثر تعقيدًا.
وفقًا لمواصفات Go، إذا كانت الوسيطة النهائية لوظيفة متغيرة قابلة للتخصيص لنوع شريحة، فيمكنها سيتم تمريرها دون تغيير كقيمة للمعلمة المتغيرة إذا كانت متبوعة بـ .... وهذا يعني أنه لن يتم إنشاء شريحة جديدة.
في حالة شريحة الشرائح، لا يمكن تعيين الشريحة نفسها إلى المعلمة المتغيرة (من النوع []الواجهة{}). وهذا هو سبب ظهور خطأ عند محاولة تمرير شريحة من الشرائح... إلى وظيفة فك الحزم.
لحل هذه المشكلة، يلزم وجود خطوة وسيطة. يجب إنشاء شريحة جديدة من النوع المناسب ([]interface{} في هذه الحالة) ونسخ عناصر شريحة الشرائح فيها. يمكن بعد ذلك تمرير هذه الشريحة الجديدة إلى وظيفة التفريغ باستخدام ....
على سبيل المثال:
var sliceOfSlices2 []interface{}
for _, v := range sliceOfSlices {
sliceOfSlices2 = append(sliceOfSlices2, v)
}
unpack(sliceOfSlices2...)
يضمن هذا الأسلوب أن كل عنصر من شريحة الشرائح يتم تمريره بشكل منفصل إلى وظيفة التفريغ، على النحو المنشود.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3