如何保存结构数组

How to save array of structs

我正在尝试保存结构数组。
我试过了:

type ShiftValue struct {
    Hour   uint8 `json:"hour"`
    Minute uint8 `json:"minute"`
}

type Shift struct {
    Start ShiftValue `json:"start"`
    End   ShiftValue `json:"end"`
}

type Config struct {
    ID                        uuid.UUID       `gorm:"type:uuid;primary_key;index;" json:"id"`
    CreatedAt                 time.Time       `json:"created_at"`
    UpdatedAt                 time.Time       `json:"updated_at"`
    DeletedAt                 *time.Time      `json:"deleted_at,omitempty"`
    Shifts                    []Shift         `gorm:"type:varchar(100)[];" json:"shifts,"`
}

但是没有用。我还尝试将班次保存为 pq.StringArray:

type Config struct {
    ID                        uuid.UUID       `gorm:"type:uuid;primary_key;index;" json:"id"`
    CreatedAt                 time.Time       `json:"created_at"`
    UpdatedAt                 time.Time       `json:"updated_at"`
    DeletedAt                 *time.Time      `json:"deleted_at,omitempty"`
    Shifts                    pq.StringArray  `gorm:"type:varchar(100)[];" json:"shifts,"`
}

这是一种工作方式,但我不知道如何将 Shift 的一部分转换为 StringArray
我应该使用 GenericArrray 吗?
如何将 Slice 转换为 GenericArrayStringArray

当我 Unmarshall 数据时,我在以下结构中执行,我验证数据,然后我想将它保存到数据库:

type ConfigUpdate struct {
    Shifts                    []Shift         `json:"shifts,"`
}

在gormembedded struct test中可以看到的最接近的场景是

package gorm_test

import "testing"

type BasePost struct {
    Id    int64
    Title string
    URL   string
}

type Author struct {
    ID    string
    Name  string
    Email string
}

type HNPost struct {
    BasePost
    Author  `gorm:"embedded_prefix:user_"` // Embedded struct
    Upvotes int32
}

type EngadgetPost struct {
    BasePost BasePost `gorm:"embedded"`
    Author   Author   `gorm:"embedded;embedded_prefix:author_"` // Embedded struct
    ImageUrl string
}

可以看出,所有这些Base Struct在父结构中都有Id被称为foreign键。

可以在 Whosebug 中找到处理的另一种情况。

type Children struct {
    Lat float64
    Lng float64
}

type ChildArray []Children

func (sla *ChildArray) Scan(src interface{}) error {
    return json.Unmarshal(src.([]byte), &sla)
}

func (sla ChildArray) Value() (driver.Value, error) {
    val, err := json.Marshal(sla)
    return string(val), err
}

type Parent struct {
    *gorm.Model    
    Childrens ChildArray `gorm:"column:childrens;type:longtext"`
}

我没有设置gorm,请自行验证。我只是做了研发部分。我希望,它会对我们中的许多人有所帮助。谢谢