我正在尝试保存一个结构数组
我试过了:
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
吗
如何从Slice
转换为GenericArray
或StringArray
?
当我Unmarshall
数据时,我在以下结构中进行,我验证数据,然后我想将其保存到数据库:
type ConfigUpdate struct {
Shifts []Shift `json:"shifts,"`
}
在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。我刚刚做了R&D部分。我希望它能帮助我们很多人。谢谢