البنية المجهولة: الكشف عن الاختلافات بين البنية {}{} و {}
في Go، الإعلان عن خرائط البنية من سلسلة إلى مجهولة يمكن تنفيذه بطريقتين:
var Foo = map[string]struct{}{
"foo": struct{}{},
}
var Foo = map[string]struct{}{
"foo": {},
}
على الرغم من أن كلا التعبيرين صالحان، إلا أن التعبير الثاني يثير تحذيرًا في Gogland بخصوص "إعلان النوع الزائد." للتوضيح، دعنا نستكشف الاختلافات الأساسية بين هذين النموذجين.
أولاً، ضع في اعتبارك ما يلي:
struct{}{}
هذا حرفي مركب يتكون من النوع (struct{}) وقيمته ({}). في المقابل، هذا:
{}
هو حرفي مركب يحذف النوع ويحتفظ بالقيمة فقط.
عادة، تتطلب الحروف المركبة تضمين مواصفات الكتابة لمساعدة المترجم في تحديد النوع المقصود. وفقًا لمواصفات اللغة:
CompositeLit = LiteralType LiteralValue .
ومع ذلك، عند تحديد حرفي مركب للخريطة، يتم تحديد أنواع المفتاح والقيمة بالفعل بواسطة نوع الخريطة. ولذلك، في الحالات التي تخطط فيها لتوفير قيم هذه الأنواع المحددة، يمكن حذف مواصفات النوع.
تتم الموافقة على هذا الحذف من خلال مواصفات Go، التي تنص على:
"Within a composite literal of array, slice, or map type T, elements or map keys that are themselves composite literals may elide the respective literal type if it is identical to the element or key type of T."
في الختام، الاثنان التعبيرات المقدمة في البداية تحقق نفس النتيجة النهائية. ومع ذلك، فإن الأخير يستفيد من ميزة اللغة التي تسمح بحذف مواصفات النوع الزائدة في القيم الحرفية المركبة للخريطة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3