将 time.Date 分配给 *time.Time 指针以测试 JSON 反序列化
Assign a time.Date to a *time.Time pointer to test a JSON deserialization
我有一个结构,其中一个字段被声明为字符串,但它用于存储时间。因此我将其更改为 *time.Time
(see the commit), note the use of a pointer to bypass the issue where ",omitempty"
doesn't really omit the value in case of an blank date.
到目前为止一切顺利。问题是现在我正在尝试编写代码来测试 JSON 字符串的正确反序列化,但我无法将结果与
进行比较
want := Record{Id: 1539, UpdatedAt: time.Date(2014, 01, 15, 22, 03, 04, 0, time.UTC)}
因为 UpdatedAt
应该是一个指针 *time.Time
,而 time.Date
returns 一个 time.Time
.
我不会用
want := Record{Id: 1539, UpdatedAt: &time.Date(2014, 01, 15, 22, 03, 04, 0, time.UTC)}
因为它确实被拒绝了(它期待一个指针,我尝试分配一个结构)
cannot take the address of time.Date(2014, 1, 15, 22, 3, 3, 0, time.UTC)
这是我的问题。有没有一种方法可以动态创建带有 time.Date
的 Record
(因此无需将 time.Date
分配给变量然后获取指针)and/or 的解决方法当对象为 serialized/deserialized 且日期为空时,保证我可以分配适当的 nil 值的问题?
您不能获取函数 return 值的地址,因为您只能获取可分配给的地址。
这样想:如果将结果存储在变量中,则可以获取该变量的地址,但如果不这样做,则无法从中获取地址。
您想先将日期值存储在一个变量中,然后再使用该变量的指针。
myDate := time.Date(2014, 01, 15, 22, 03, 04, 0, time.UTC)
want := Record{Id: 1539, UpdatedAt: &myDate}
仅作记录,您可以定义如下函数:
func toTimePtr(t time.Time) *time.Time {
return &t
}
然后这样做:
want := Record{Id: 1539, UpdatedAt: toTimePtr(time.Date(2014, 01, 15, 22, 03, 04, 0, time.UTC))}
我有一个结构,其中一个字段被声明为字符串,但它用于存储时间。因此我将其更改为 *time.Time
(see the commit), note the use of a pointer to bypass the issue where ",omitempty"
doesn't really omit the value in case of an blank date.
到目前为止一切顺利。问题是现在我正在尝试编写代码来测试 JSON 字符串的正确反序列化,但我无法将结果与
进行比较want := Record{Id: 1539, UpdatedAt: time.Date(2014, 01, 15, 22, 03, 04, 0, time.UTC)}
因为 UpdatedAt
应该是一个指针 *time.Time
,而 time.Date
returns 一个 time.Time
.
我不会用
want := Record{Id: 1539, UpdatedAt: &time.Date(2014, 01, 15, 22, 03, 04, 0, time.UTC)}
因为它确实被拒绝了(它期待一个指针,我尝试分配一个结构)
cannot take the address of time.Date(2014, 1, 15, 22, 3, 3, 0, time.UTC)
这是我的问题。有没有一种方法可以动态创建带有 time.Date
的 Record
(因此无需将 time.Date
分配给变量然后获取指针)and/or 的解决方法当对象为 serialized/deserialized 且日期为空时,保证我可以分配适当的 nil 值的问题?
您不能获取函数 return 值的地址,因为您只能获取可分配给的地址。
这样想:如果将结果存储在变量中,则可以获取该变量的地址,但如果不这样做,则无法从中获取地址。
您想先将日期值存储在一个变量中,然后再使用该变量的指针。
myDate := time.Date(2014, 01, 15, 22, 03, 04, 0, time.UTC)
want := Record{Id: 1539, UpdatedAt: &myDate}
仅作记录,您可以定义如下函数:
func toTimePtr(t time.Time) *time.Time {
return &t
}
然后这样做:
want := Record{Id: 1539, UpdatedAt: toTimePtr(time.Date(2014, 01, 15, 22, 03, 04, 0, time.UTC))}