تضمين بنية مع gorm
في gorm ، عند تضمين بنية أخرى ، قد ينشئ GORM جدولًا منفصلًا للبنية المضمنة. ومع ذلك ، إذا كنت ترغب في تخزين البنية المضمنة كحقل إضافي داخل الجدول الرئيسي ، فيمكن استخدام النهج التالي:
بنية مضمنة:اكتب struct { نقطة *نقطة جغرافية } اكتب بنية الجغرافية { اللات Float64 Lon Float64 }
type A struct {
Point *GeoPoint
}
type GeoPoint struct {
Lat float64
Lon float64
}
func (gp *GeoPoint) Scan(src interface{}) error {
// Convert the `src` value to a byte array.
b, ok := src.([]byte)
if !ok {
return fmt.Errorf("could not convert to byte array")
}
// Unmarshal the byte array into the `GeoPoint` struct.
if err := json.Unmarshal(b, gp); err != nil {
return fmt.Errorf("could not unmarshal JSON: %v", err)
}
return nil
}
func (gp GeoPoint) Value() (driver.Value, error) {
// Marshal the `GeoPoint` struct into a byte array.
b, err := json.Marshal(gp)
if err != nil {
return nil, fmt.Errorf("could not marshal JSON: %v", err)
}
return string(b), nil
}
عن طريق تنفيذ طرق المسح والقيمة ، يمكن لـ GORM تحويل البنية المضمنة من وإلى تنسيق JSON. The Gorm: "Column" و Gorm: "type" تحدد اسم العمود ونوع البيانات للبنية المضمنة داخل الجدول الرئيسي. تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3