2 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
我終于明白了。
有幾個(gè)問(wèn)題:
1-MarshalJSONand UnmarshalJSON僅適用于數(shù)據(jù)庫(kù)交互之前和之后
2-結(jié)構(gòu)table定義沒(méi)有正確的gorm定義:
type tablestruct {
ID int64 `gorm:"primary_key;auto_increment"json:"id"`
CreatedAt timeLib.JSONTime `gorm:"type:timestamp;default:current_timestamp"json:"createdAt"`
UpdatedAt timeLib.JSONTime `gorm:"type:timestamp;default:current_timestamp ON update current_timestamp"json:"updatedAt"`
}
3-由于 typeJSONTime是一個(gè)新類(lèi)型,驅(qū)動(dòng)程序不知道如何轉(zhuǎn)換它,所以我們需要重寫(xiě)Value:
func (jsonTime JSONTime) Value() (driver.Value, error) {
return time.Time(jsonTime), nil
}
4-最后我們需要重寫(xiě)Scan以便將數(shù)據(jù)庫(kù)值轉(zhuǎn)換為JSONTime值
func (jsonTime *JSONTime) Scan(value interface{}) error {
if value == nil {
*jsonTime = JSONTime(time.Now())
return nil
}
if readTime, err := driver.DefaultParameterConverter.ConvertValue(value); err == nil {
if convertedTime, ok := readTime.(time.Time); ok {
*jsonTime = JSONTime(convertedTime)
return nil
}
}
return errors.New("failed to scan TIME")
}

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
嘗試一下
type JSONTime struct {
time.Time
}
type BaseModel struct {
ID uint `gorm:"autoIncrement;primary_key" json:"id"`
CreatedAt JSONTime `gorm:"type:timestamp;default:current_timestamp" json:"created_at"`
UpdatedAt JSONTime `gorm:"type:timestamp;default:current_timestamp" json:"updated_at"`
DeletedAt JSONTime `gorm:"type:timestamp;default:current_timestamp" json:"deleted_at"`
}
- 2 回答
- 0 關(guān)注
- 144 瀏覽
添加回答
舉報(bào)