كيف يُعيَّن JSON إلى هياكل Go
تستخدم Go حقول هيكل مُصدَّرة مع وسوم json بين علامات اقتباس خلفية للتسلسل JSON. يُنشئ المولّد هيكلًا لكل كائن JSON مع حقل مُصدَّر واحد لكل مفتاح. تتبع أسماء الحقول اصطلاحات Go: تُصدَّر (PascalCase) ويُحفَظ مفتاح JSON الأصلي في الوسم json:"key". هكذا "firstName" في JSON يصبح FirstName string `json:"firstName"` في Go.
يتبع تعيين الأنواع قواعد encoding/json القياسية: سلاسل JSON تصبح string والأعداد الصحيحة int64 والكسور العشرية float64 والقيم المنطقية bool والمصفوفات شرائح ([]T). الكائنات المتداخلة تولّد أنواع هياكل مسمّاة إضافية. حقل قابل للقيمة الفارغة يُكتب كمؤشر (*T) حتى تمثّل القيمة الصفرية nil قيمة JSON null بشكل نظيف.
يمكن تبديل خيار وسم omitempty لكل حقل — `json:"key,omitempty"` يُسقط الحقل من مخرجات التحويل عندما يحمل قيمته الصفرية. هذا هو نمط Go القياسي لحقول API الاختيارية.
اصطلاحات التسمية ومحاور Go
لدى Go اصطلاحات أسلوب صارمة تفرضها أدوات gofmt وgolint. يطبّقها المولّد تلقائيًا: الاختصارات مثل "id" و"url" و"http" و"api" تُكتب بأحرف كبيرة ID وURL وHTTP وAPI وفق دليل الأسلوب الرسمي لـ Go. فمثلًا "userId" يصبح UserID و"apiUrl" يصبح APIURL.
تُشتقّ أسماء الهياكل من مفاتيح كائنات JSON بصيغة PascalCase. الهيكل الجذري يُسمّى "Root" افتراضيًا (قابل للتخصيص). عندما تظهر نفس بنية JSON عدة مرات تحت مفاتيح مختلفة يكتشف المولّد البنية المكررة ويُعيد استخدام نفس نوع الهيكل.
تتضمن المخرجات تصريح حزمة (افتراضيًا "main" للنماذج الأولية السريعة وقابل للتغيير) والاستيراد الضروري لـ "encoding/json" إذا تم توليد دوال مساعدة للتحويل جانب الهياكل.
سير عمل تطوير Go
يقضي مطوّرو Go الذين يعملون مع REST APIs وقتًا طويلًا في كتابة تعريفات هياكل يدويًا تعكس استجابات JSON. الصق استجابة API وولّد الهياكل واستخدم json.Unmarshal فورًا لتحليل الاستجابة إلى قيم Go مكتوبة بالأنواع.
عند بناء أدوات CLI مع cobra أو معالجات HTTP مع net/http تُعدّ هياكل الطلب والاستجابة المكتوبة بالأنواع ضرورية. يولّد المحوّل هياكل جاهزة للاستخدام مع json.NewDecoder(r.Body).Decode(&req) وjson.NewEncoder(w).Encode(resp).
مشاريع وحدة Go التي تستدعي APIs تابعة لجهات خارجية تحتفظ كثيرًا بملفات الهياكل المولّدة في حزمة internal/models. تندمج مخرجات المولّد بسلاسة في هذا النمط مع اسم حزمة قابل للتهيئة.