Einbettung von Strukturen in gorm
In GORM können GORM eine separate Tabelle für die eingebettete Struktur erstellen. Wenn Sie jedoch die eingebettete Struktur als zusätzliches Feld innerhalb der Haupttabelle speichern möchten, kann der folgende Ansatz verwendet werden:
Lösung:
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"`
}
Durch die Implementierung der Scan- und Wertmethoden kann GORM die eingebettete Struktur in ein JSON -Format konvertieren. Die GORM: "Spalte" und GORM: "Typ" -Tags Geben Sie den Spaltennamen und den Datentyp für die eingebettete Struktur in der Haupttabelle an.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3