为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
MMMHUHU 2023-08-07 10:50:44
我不明白为什么下面的结果是相同的。我预计第一个结果是指针地址。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     }
查看完整描述

1 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

因为您使用这fmt.Println()意味着将应用默认格式来打印它。并引用以下的包文档fmt

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

[...]

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

既然time.TimeTime.String()方法,那么指向它的指针也有:*time.Time也有这个String()方法。因此,fmt包调用它来生成值的字符串表示形式*time.Time

引用规范:方法集:

任何其他类型的方法集T由使用接收者类型声明的所有方法组成T。对应指针类型 的方法集是用receiver*T声明的所有方法的集合(即还包含的方法集。*TTT

总而言之,无论您打印一个time.Time或一个*time.Time值,它的String()方法都会被调用,并且它返回的任何内容都将被使用/打印。


查看完整回答
反对 回复 2023-08-07
  • 1 回答
  • 0 关注
  • 53 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信