在围棋文档说(强调):
使用时间的程序通常应将其存储并 作为值(而不是指针) 传递。也就是说,时间变量和结构字段的类型应该是time.Time,而不是* time.Time。一个时间值可以同时被多个goroutine使用。
最后一句话(关于在多个goroutine中同时使用Time值)是否是“通常”应将它们作为值而不是指针“存储”并传递的唯一原因?这对于其他结构也是常见的吗?我尝试寻找在time.Time声明和方法中专门启用此功能的任何逻辑,但没有发现任何特殊之处。
更新:我经常不得不提供我的结构的JSON表示,我宁愿省略空/未初始化的时间。该json:",omitempty"标记不适用于time.Time值,这似乎是预期的行为,但最好的解决方法似乎是使用指针,这与上面引用的文档中的建议背道而驰。
json:",omitempty"
对于许多简单的值来说很常见。
在Go中,当某个值的大小不超过一两个单词时,通常将其简单地用作值而不是使用指针。仅仅是因为如果对象很小并且没有传递它进行更改就没有理由使用指针。
您可能不得不取消学习无法将所有结构化的内容都视为价值的语言的实践。使用整数或浮点数作为值,而不是指针,这很自然。为什么有时不这样做呢?
关于JSON的确切问题,并假设您不想为此编写特定的Marshaller,使用没问题*time.Time。实际上,在golang- nuts列表中已经提到了此问题。
*time.Time