incrustar estructuras con gorm
en Gorm, al incrustar una estructura dentro de otra, Gorm puede crear una tabla separada para la estructura incrustada. Sin embargo, si desea almacenar la estructura incrustada como un campo adicional dentro de la tabla principal, se puede utilizar el siguiente enfoque:
:
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"`
}
implementando los métodos de escaneo y valor, Gorm puede convertir la estructura integrada hacia y desde un formato JSON. El Gorm: "Columna" y Gorm: "Escriba" etiquetas especifican el nombre de la columna y el tipo de datos para la estructura integrada dentro de la tabla principal.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3