Pointers 时间:指针或值

Pointers 时间:指针或值,pointers,time,go,Pointers,Time,Go,(增加了重点): 使用时间的程序通常应将时间存储并传递为值,而不是指针。也就是说,时间变量和结构字段的类型应该是time.time,而不是*time.time。时间值可由多个goroutine同时使用 最后一句话(关于同时在多个goroutine中使用时间值)是它们“通常”作为值而不是指针存储和传递的唯一原因吗?这在其他结构中也很常见吗?我试着在中寻找任何能够具体实现这一点的逻辑,但没有注意到任何特殊的地方 更新:我经常需要为我的结构提供JSON表示,我宁愿省略空的/未初始化的时间。json:“

(增加了重点):

使用时间的程序通常应将时间存储并传递为值,而不是指针。也就是说,时间变量和结构字段的类型应该是time.time,而不是*time.time。时间值可由多个goroutine同时使用

最后一句话(关于同时在多个goroutine中使用时间值)是它们“通常”作为值而不是指针存储和传递的唯一原因吗?这在其他结构中也很常见吗?我试着在中寻找任何能够具体实现这一点的逻辑,但没有注意到任何特殊的地方


更新:我经常需要为我的结构提供JSON表示,我宁愿省略空的/未初始化的时间。
json:“,ommitempty”
标记不适用于time.time值,但最好的解决方法似乎是使用指针,这与上面引用的文档中的建议背道而驰。

这对于许多简单值都很常见

在Go中,当某个值不大于一个或两个单词时,通常只将其用作值,而不使用指针。这仅仅是因为如果对象很小,并且您没有传递它以进行更改,那么就没有理由使用指针

你可能不得不放弃那些无法将所有结构化的东西作为值来处理的语言实践。使用整数或浮点数作为值,而不是指针,这可能是很自然的。为什么不做同样的事情呢


关于JSON的确切问题,假设您不想为此编写特定的封送拆收器,那么使用
*time.time
就没有问题了。事实上,这个问题已经解决了。

好的方面。我问这个问题的一个原因是我经常需要为我的结构提供JSON表示,我宁愿省略空的/未初始化的时间。由于
json:,ommitempty“
标记不能处理time.time值,所以我一直在使用指针。我将更新我的问题以提及这一点。在您的情况下,如果您需要防止在JSON中转储空时间,并且您不想覆盖封送拆收器,那么我认为使用指针没有真正的问题。