为什么打印 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
    }


MMMHUHU
浏览 57回答 1
1回答

扬帆大鱼

因为您使用这fmt.Println()意味着将应用默认格式来打印它。并引用以下的包文档fmt:除非使用动词 %T 和 %p 打印,否则特殊格式注意事项适用于实现某些接口的操作数。按申请顺序:[...]如果操作数实现 String() 字符串方法,则将调用该方法将对象转换为字符串,然后根据动词(如果有)的要求对其进行格式化。既然time.Time有Time.String()方法,那么指向它的指针也有:*time.Time也有这个String()方法。因此,fmt包调用它来生成值的字符串表示形式*time.Time。引用规范:方法集:任何其他类型的方法集T由使用接收者类型声明的所有方法组成T。对应指针类型 的方法集是用receiver或*T声明的所有方法的集合(即还包含)的方法集。*TTT总而言之,无论您打印一个time.Time或一个*time.Time值,它的String()方法都会被调用,并且它返回的任何内容都将被使用/打印。
打开App,查看更多内容
随时随地看视频慕课网APP