Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah cara saya membenamkan struct dalam struct lain dalam GORM dan menyimpannya sebagai medan dalam jadual utama?

Bagaimanakah cara saya membenamkan struct dalam struct lain dalam GORM dan menyimpannya sebagai medan dalam jadual utama?

Barbara Streisand
Barbara Streisandasal
2024-11-03 03:20:03973semak imbas

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

Membenamkan Struktur dengan GORM

Dalam GORM, apabila membenamkan struct dalam yang lain, GORM boleh mencipta jadual berasingan untuk struct terbenam. Walau bagaimanapun, jika anda ingin menyimpan struct terbenam sebagai medan tambahan dalam jadual utama, pendekatan berikut boleh digunakan:

Penyelesaian:

  1. Takrifkan struct terbenam:
<code class="go">type A struct {
    Point *GeoPoint
}

type GeoPoint struct {
    Lat float64
    Lon float64
}</code>
  1. Laksanakan antara muka sql.Scanner dan driver.Valuer untuk struct terbenam:
<code class="go">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
}</code>
  1. Kemas kini model GORM untuk menggunakan struct terbenam dengan teg gorm:"column" dan gorm:"type":
<code class="go">type A struct {
    gorm.Model
    Point *GeoPoint `gorm:"column:point;type:json"`
}</code>

Dengan melaksanakan kaedah Imbas dan Nilai, GORM boleh menukar struct terbenam kepada dan daripada format JSON. Teg gorm:"column" dan gorm:"type" menentukan nama lajur dan jenis data untuk struct terbenam dalam jadual utama.

Atas ialah kandungan terperinci Bagaimanakah cara saya membenamkan struct dalam struct lain dalam GORM dan menyimpannya sebagai medan dalam jadual utama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn