Avatar ·

ما الغرض من العلامات (tags) في هياكل Go وكيفية استخدامها؟

مرحبًا بالجميع! لقد بدأت مؤخرًا في تعلم Go، ولدي سؤال: ما الغرض من العلامات (tags) في الهياكل؟ أرى في كود المكتبات شيئًا مثل: ```go type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"` } ``` أو: ```go type Config struct { Port int `yaml:"port"` Host string `yaml:"host"` } ``` أفهم أن هذا مرتبط بـ JSON و YAML، لكنني لا أفهم آلية العمل تمامًا. كيف تتعامل Go مع هذه العلامات؟ هل يمكنني إنشاء علامات خاصة بي؟ والأهم — لماذا نحتاجها أساسًا إذا كان يمكننا فقط استخدام أسماء الحقول في الهيكل؟ على سبيل المثال، لماذا لا نستخدم فقط `json:"ID"` بدلاً من `json:"id"`؟ أو ماذا لو أردت أن يكون اسم الحقل مختلفًا في الكود وعند التسلسل (serialization)؟ سأكون ممتنًا لشرح مفصل مع أمثلة، خاصة حول كيفية كتابة محلل علامات خاص بي. شكرًا! <<>>

ما هي علامات الهياكل في Go؟

علامات الهياكل (struct tags) هي سلاسل نصية تُضاف إلى تعريفات الحقول في الهياكل، وتُستخدم لتوفير بيانات وصفية (metadata) إضافية. يتم الوصول إليها عبر حزمة الانعكاس (reflect) في وقت التشغيل. على سبيل المثال، العلامة `json:"id"` تخبر مكتبة encoding/json أن اسم الحقل عند التحويل إلى JSON هو "id" وليس "ID".