将time.Date分配给* time.Time指针以测试JSON反序列化

Sim*_*tti 1 json pointers go

我有一个结构,其中一个字段被声明为String,但它旨在存储时间。因此,我将其更改为*time.Time请参阅commit),请注意使用指针绕过问题(在",omitempty"空白日期的情况下实际上并没有忽略该值)

到目前为止,一切都很好。问题是,现在我正在尝试编写代码以测试JSON字符串的正确反序列化,但是我无法将结果与

want := Record{Id: 1539, UpdatedAt: time.Date(2014, 01, 15, 22, 03, 04, 0, time.UTC)}
Run Code Online (Sandbox Code Playgroud)

因为UpdatedAt它应该是一个指针*time.Time,而time.Date返回一个time.Time

我不能用

want := Record{Id: 1539, UpdatedAt: &time.Date(2014, 01, 15, 22, 03, 04, 0, time.UTC)}
Run Code Online (Sandbox Code Playgroud)

因为它确实被拒绝(它需要一个指针,所以我尝试分配一个结构)

cannot take the address of time.Date(2014, 1, 15, 22, 3, 3, 0, time.UTC)
Run Code Online (Sandbox Code Playgroud)

这是我的问题。有没有一种方法来创建一个Recordtime.Date上飞(因此不分配time.Date给一个变量,然后得到的指针)和/或对问题的解决方法,保证我能当对象被序列分配适当的零值/反序列化并且日期为空?

Dar*_*all 10

您想先将日期值存储在一个变量中,然后再使用该变量的指针。

myDate := time.Date(2014, 01, 15, 22, 03, 04, 0, time.UTC)
want := Record{Id: 1539, UpdatedAt: &myDate}
Run Code Online (Sandbox Code Playgroud)


rvi*_*cio 5

您不能采用函数返回值的地址,因为您只能采用可以分配给对象的地址。

可以这样考虑:如果将结果存储在变量中,则可以获取该变量的地址,但是如果不这样做,则没有任何可以从中获取地址的地址。

  • @SimoneCarletti,没有不同的解决方案,您必须按照您在问题中所写的内容进行操作:将值存储在变量中,然后引用该变量。 (2认同)