«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как мне встроить структуру в другую структуру в Gorm и сохранить его как поле в основном столе?

Как мне встроить структуру в другую структуру в Gorm и сохранить его как поле в основном столе?

Опубликовано в 2025-01-30
Просматривать:302

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

встраивание структур с GORM

в GORM, при внедрении структуры в другом, GORM может создать отдельную таблицу для встраиваемой структуры. Однако, если вы хотите сохранить встроенную структуру в качестве дополнительного поля в основной таблице, можно использовать следующий подход:

]

] Решение:

  1. define встроенная структура:
type A struct {
    Point *GeoPoint
}

type GeoPoint struct {
    Lat float64
    Lon float64
}
  1. реализуйте интерфейсы sql.scanner и driver.valuer для встроенной struct:
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. Обновите модель GORM, чтобы использовать встроенную структуру с GORM: "Column" и GORM: "type" Tags:
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