package model import ( "database/sql/driver" "encoding/json" "fmt" "time" ) type CustomTime time.Time const ctLayout = "2006-01-02 15:04:05" // 想要的时间格式 func (ct *CustomTime) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(*ct).Format(ctLayout)) } func (ct *CustomTime) UnmarshalJSON(b []byte) error { var s string if err := json.Unmarshal(b, &s); err != nil { return err } t, err := time.Parse(ctLayout, s) if err != nil { return err } *ct = CustomTime(t) return nil } // Scan 将数据库值扫描到Go中的CustomTime func (ct *CustomTime) Scan(value interface{}) error { if value == nil { *ct = CustomTime(time.Time{}) return nil } if t, ok := value.(time.Time); ok { *ct = CustomTime(t) return nil } return fmt.Errorf("can't scan %T into CustomTime", value) } // Value 将CustomTime的值转换为数据库值 func (ct CustomTime) Value() (driver.Value, error) { if time.Time(ct).IsZero() { return nil, nil } return time.Time(ct), nil }