我是Golang的新手,需要帮助!
在PostgreSQL数据库中,我有一个名为调查的表。
创建表调查( SURVEY_ID UUID PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(), SURVEY_NAME VARCHAR …
错误已经说明错了:
解析时间“”2019-01-01 00:00:00“”as“”2006-01-02T15:04:05Z07:00“”:无法解析“00:00:00”“as”T“
你过世了 "2019-01-01 00:00:00" 虽然它期望不同的时间格式,即 RFC3339 ( UnmarshalJSON的默认值 )。
"2019-01-01 00:00:00"
要解决此问题,您要么希望以预期的格式传递时间 "2019-01-01T00:00:00Z00:00" 或定义您自己的类型 CustomTime 像这样:
"2019-01-01T00:00:00Z00:00"
CustomTime
const timeFormat = "2006-01-02 15:04:05" type CustomTime time.Time func (ct *CustomTime) UnmarshalJSON(data []byte) error { newTime, err := time.Parse(timeFormat, strings.Trim(string(data), "\"")) if err != nil { return err } *ct = CustomTime(newTime) return nil } func (ct *CustomTime) MarshalJSON() ([]byte, error) { return []byte(fmt.Sprintf("%q", time.Time(*ct).Format(timeFormat))), nil }
小心,你可能还需要实现 Valuer 和 Scanner 用于解析进出数据库的时间的接口,如下所示:
Valuer
Scanner
func (ct CustomTime) Value() (driver.Value, error) { return time.Time(ct), nil } func (ct *CustomTime) Scan(src interface{}) error { if val, ok := src.(time.Time); ok { *ct = CustomTime(val) } else { return errors.New("time Scanner passed a non-time object") } return nil }
去游乐场 例。