【发布时间】:2022-06-28 00:21:46
【问题描述】:
我正在尝试为自定义类型编写解组函数。 考虑下面的代码 ( playground )
package main
import (
"encoding/json"
"fmt"
"strings"
"time"
)
type Time time.Time
func (st *Time) UnmarshalJSON(b []byte) error {
// "2021-05-21T03:10:20.958450" -> "2021-05-21T03:10:20.958450Z"
s := strings.Trim(string(b), "\"")
t, err := time.Parse(time.RFC3339, fmt.Sprintf("%s%s", s, "Z"))
if err != nil {
return fmt.Errorf("parse time: %w", err)
}
*st = Time(t)
return nil
}
type User struct {
Name string
TS Time
}
const data = `{"id":3, "name":"Name", "ts":"2021-05-21T03:10:20.958450"}`
func main() {
user := new(User)
json.Unmarshal([]byte(data), &user)
fmt.Printf("%v\n", user)
}
我成功地从我的
time.Parse()
获得了一个有效的
time.Time
值,但我不太明白为什么
*st = Time(t)
给出了如此奇怪的值?
目前打印出以上内容:
&{Name {958450000 63757163420 }}
但我想更类似于:
&{Name 2021-05-21 03:10:20.95845 +0000 UTC}
我在这里误解了什么?