当前位置: 首页 > 面试题库 >

time.Time:指针或值

濮冠宇
2023-03-14
问题内容

在围棋文档说(强调):

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

最后一句话(关于在多个goroutine中同时使用Time值)是否是“通常”应将它们作为值而不是指针“存储”并传递的唯一原因?这对于其他结构也是常见的吗?我尝试寻找在time.Time声明和方法中专门启用此功能的任何逻辑,但没有发现任何特殊之处。

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


问题答案:

对于许多简单的值来说很常见。

在Go中,当某个值的大小不超过一两个单词时,通常将其简单地用作值而不是使用指针。仅仅是因为如果对象很小并且没有传递它进行更改就没有理由使用指针。

您可能不得不取消学习无法将所有结构化的内容都视为价值的语言的实践。使用整数或浮点数作为值,而不是指针,这很自然。为什么有时不这样做呢?

关于JSON的确切问题,并假设您不想为此编写特定的Marshaller,使用没问题*time.Time。实际上,在golang-
nuts列表中
已经提到了此问题。



 类似资料:
  • 问题内容: 我有一个mongo文档,其中包含一个日期字段,该日期字段也可以为false(或未定义),并且似乎无法找到如何检查该字段是否可用或为false或是否为日期(time.Time)的日期golang / mgo:S 问题答案: 如果您有一个字段,并且想知道它是否正确地设置了有效日期,则可以查询其方法。否则,如果您要在数据库中查询此类文档,则可以执行以下操作之一。 查询该字段是否为假: 使用$

  • 指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。 如果一个指针指向的是另外一个指针,我们就称它为 二级指针,或者 指向指针的指针。 假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示: 将这种关系转换为C语言代码: 指针变

  • 描述 (Description) 方法time()将时间作为以UTC为单位以秒为单位表示的浮点数返回。 Note - 即使始终将时间作为浮点数返回,并非所有系统都提供精度高于1秒的时间。 虽然此函数通常返回非递减值,但如果在两次调用之间设置了系统时钟,则它可以返回比先前调用更低的值。 语法 (Syntax) 以下是time()方法的语法 - time.time() 参数 (Parameters)

  • 6. 指向指针的指针与指针数组 指针可以指向基本类型,也可以指向复合类型,因此也可以指向另外一个指针变量,称为指向指针的指针。 int i; int *pi = &i; int **ppi = π 这样定义之后,表达式*ppi取pi的值,表达式**ppi取i的值。请读者自己画图理解i、pi、ppi这三个变量之间的关系。 很自然地,也可以定义指向“指向指针的指针”的指针,但是很少用到: int

  • 问题内容: 我可以使用指针和值嵌入golang中。通过指针 按价值 通过指针或值更喜欢什么? 问题答案: 这取决于。这里有几种可能性。 如果Renderer按值传递,并且在 Bitmap上定义了Bitmap所需的方法,则需要嵌入 Bitmap。 如果将Renderer作为指针传递,则可以将Bitmap作为值嵌入而没有任何问题(在这种情况下仍可以访问指针方法)。 如果Bitmap具有返回指针的构造函

  • 指向指针的指针是多个间接或指针链的形式。 通常,指针包含变量的地址。 当我们定义指向指针的指针时,第一个指针包含第二个指针的地址,它指向包含实际值的位置,如下所示。 必须声明一个指向指针的指针的变量。 这是通过在其名称前面放置一个额外的星号来完成的。 例如,以下是声明指向int类型指针的指针的声明 - int **var; 当目标值由指针指向间接指向时,访问该值需要应用星号运算符两次,如下例所示