I will start with the proposal as a TL;DR before explaining the motivations behind it:
Proposal
It would be quite convenient if we could have the encoding/json
package understand the format of time.Time
as part of the struct definition. Something like this:
type User struct { Name string JoinDate time.Time `time:"2006-01-02"` }
This means that when you write json.Unmarshal(data, &user)
, the json package will understand what format to parse/serialize the field with.
Motivation/Experience Report
Currently, there are three workarounds:
type MyTime time.Time
: https://goplay.space/#APZL4Rzlm_
Embedding time.Time in MyTime type: https://goplay.space/#q-oKnSTtQV
Implementing json.Unmarshaller
on the parent struct: https://goplay.space/#mzb8MQfajl
Those workarounds are not bad. However, I've noticed that they get out of hand once your codebase starts to scale.
Imagine having hundreds of structs with hundreds of fields where many of them could have different Time types just because they have different serialization formats, and nothing else.
The time.Time
package, I think, might be too opinionated to assume RFC3339 is the only acceptable format in the json.Unmarshaller
interface:
. (Same goes for RFC3339Nano in the json.Marshaller implementation).
I think it makes sense for it to be a default serialization format, but not the only one. The workaround is initially not bad at all. However, it gets cumbersome when your project scales.
I think this proposal shows that the above solution can make our code more declarative and less cumbersome. This echo's Rob Pike's talk in that here we can hide complexity behind a simple interface.
Lastly, this doesn't make or break my Go experience, but I personally see room for enhancement here.
fl0cke, DeedleFake, augustoroman, frenzywang, zerozh and 369 moreromainmenkemiaojiuchen, kwk, wsyqn6, Demetri0, kochie and 19 morewclaro, ddouglas, amrzteb, woswos, EwenQuim and 5 more
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4