встраивание структур с GORM
в GORM, при внедрении структуры в другом, GORM может создать отдельную таблицу для встраиваемой структуры. Однако, если вы хотите сохранить встроенную структуру в качестве дополнительного поля в основной таблице, можно использовать следующий подход:
]] Решение:
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
}
type A struct {
gorm.Model
Point *GeoPoint `gorm:"column:point;type:json"`
}
, реализуя методы сканирования и значения, GORM может преобразовать встроенный структуру в формат JSON и обратно. Теги Gorm: «Column» и Gorm: «Type» указывают имя столбца и тип данных для встроенной структуры в основной таблице.
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3