"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo increto una estructura dentro de otra estructura en Gorm y la guardo como un campo en la mesa principal?

¿Cómo increto una estructura dentro de otra estructura en Gorm y la guardo como un campo en la mesa principal?

Publicado el 2025-01-30
Navegar:978

How do I embed a struct within another struct in GORM and store it as a field in the main table?

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:

:

  1. Define Una estructura integrada:
type A struct {
    Point *GeoPoint
}

type GeoPoint struct {
    Lat float64
    Lon float64
}
  1. implementa las interfaces sql.scanner y control.valuer para la estructura incrustada:
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
}
  1. Actualice el modelo Gorm para usar la estructura integrada con el gorm: "columna" y gorm: "escriba" etiquetas:
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.

Último tutorial Más>

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