为了账号安全,请及时绑定邮箱和手机立即绑定

如何保存结构数组

如何保存结构数组

Go
繁花如伊 2022-05-18 14:54:08
我正在尝试保存一个结构数组。我试过: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,"`}但不工作。我还尝试将 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吗?我怎样才能从SlicetoGenericArray或进行转换StringArray?当我Unmarshall获取数据时,我在以下结构中执行它,我验证数据,然后我想将它保存到数据库中:type ConfigUpdate struct {    Shifts                    []Shift         `json:"shifts,"`}
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

在 gorm嵌入式结构测试中可以看到的最接近的场景是


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

}


可以看出,所有这些基础结构都Id必须被称为foreign父结构中的键。


可以在 StackOverflow另一个答案之一中找到另一种情况。


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。我只是做了研发部分。我希望,它会帮助我们中的许多人。谢谢


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号