为什么打印time.Time和指向time.Time的指针具有相同的结果?

我不明白为什么下面的结果相同。 我希望第一个结果是指针地址。

func print(t *time.Time) {
    fmt.Println(t) // 2009-11-10 23:00:00 +0000 UTC m=+0.000000001 => it should be the address of t
    fmt.Println(*t) // 2009-11-10 23:00:00 +0000 UTC m=+0.000000001
}
jimmetao 回答:为什么打印time.Time和指向time.Time的指针具有相同的结果?

因为使用fmt.Println()打印,这意味着将应用默认格式。并引用fmt的软件包文档:

  

除了使用动词%T和%p进行打印时,特殊的格式注意事项适用于实现某些接口的操作数。按申请顺序:

     

[...]

     
      
  1. 如果操作数实现String()字符串方法,则将调用该方法将对象转换为字符串,然后根据动词的要求对其进行格式化(如果有)。
  2.   

由于time.Time有一个Time.String()方法,所以指向它的指针也有:*time.Time也有这个String()方法。因此fmt包将其调用以产生*time.Time值的字符串表示形式。

引用Spec: Method sets:

  

任何其他类型T的方法集由声明为接收者类型T的所有方法组成。相应的pointer type *T的方法集是用接收者*TT声明的所有所有方法的集合(也就是说,它还包含T

总而言之,无论您打印time.Time还是*time.Time值,都将调用其String()方法,并使用或打印返回的任何内容。

本文链接:https://www.f2er.com/3102820.html

大家都在问