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

为什么在 Go 中将两个 time.durations 相除会导致

为什么在 Go 中将两个 time.durations 相除会导致

Go
婷婷同学_ 2021-09-21 20:32:36
我不明白time.Duration在 Go 中划分 a 是什么意思。例如,这是超级可爱的:d,_ := time.ParseDuration("4s")fmt.Println(d/4)打印1s。这是 ace,因为(天真地)4 秒除以 4 是 1 秒。但是当我们发现分母中的 4 必须是一个持续时间时,它会有点混乱。所以虽然:d1 := time.Duration(4)fmt.Println(d/d1)也打印1s,我们知道d1实际上是这样4ns,我完全不相信 4 秒除以 4 纳秒是 1 秒。我很困惑,因为持续时间除以持续时间应该是无量纲的(我认为,对吧?),而持续时间除以无量纲数应该有时间单位。而且我知道类型 != unit,但我显然误解了某些东西,或者很可能是一组东西。任何帮助解决这个问题将不胜感激!这是上述示例的 go 操场。https://play.golang.org/p/Ny2_ENRlX6。仅就上下文而言,我正在尝试计算事件之间的平均时间。我可以在几秒钟内恢复使用漂浮物,但我试图留在time.Duration陆地上。
查看完整描述

3 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

从数学上讲,你是正确的:除以两个时间。持续时间应该导致一个无量纲的数量。但这不是 go 的类型系统的工作原理。任何数学运算都会产生与输入相同类型的值。您必须将除法结果显式转换为 int64 以获得“无类型”数量。


查看完整回答
反对 回复 2021-09-21
?
天涯尽头无女友

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

之所以如此,是因为time.Durationint64。请参阅时间包的文档。

您将 4000000000(4s)除以 4(4ns),得到 1000000000(1s)。您应该查看操作,因为它们在整数未键入值的情况下。TypeDuration使它看起来像一个物理值,但对于除法运算,它只是一个数字。


查看完整回答
反对 回复 2021-09-21
?
慕容708150

TA贡献1831条经验 获得超4个赞

没有附加到time.Duration. Atime.Duration通过提供独特的类型(即time.Duration类型)来表示持续时间的物理概念(以秒为单位测量并具有单位)。但从技术上讲,它只是一个uint64.

如果您尝试将实际单位附加到类型,您将进入单位地狱: (time.Duration * time.Duration)/acceleration.Radial * mass.MetricTon 是什么?最有可能未定义。


查看完整回答
反对 回复 2021-09-21
  • 3 回答
  • 0 关注
  • 324 浏览
慕课专栏
更多

添加回答

举报

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