如何保存结构数组
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
转换为 GenericArray
或 StringArray
?
当我 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,请自行验证。我只是做了研发部分。我希望,它会对我们中的许多人有所帮助。谢谢
我正在尝试保存结构数组。
我试过了:
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
转换为 GenericArray
或 StringArray
?
当我 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,请自行验证。我只是做了研发部分。我希望,它会对我们中的许多人有所帮助。谢谢