为什么 `time.Hour / 73.0` 在 Go 中可以工作,但 `time.Hour / d` 却失败?
将 Duration 转换为浮点数并返回
在 Go 中,当尝试对持续时间、浮点数和无类型常量执行操作时,您可能会遇到不同的行为。下面仔细看看两行类似的代码,以及为什么其中一行可以工作而另一行不行。
工作行:time.Hour / 73.0
表达式 time.Hour / 73.0 是简短的变量声明。右侧表达式是 time.Duration(一小时的常量值)和无类型数值常量 (73.0) 之间的除法。
由于 time.Duration 是整数类型 (int64),因此无类型数值常量常量转换为 time.Duration (不损失精度)。因此,除法将得到一个 time.Duration 值,该值可用于睡眠指定的一小时。
失败行:time.Hour / d
相反,表达式 time.Hour / d 失败,因为 d 的类型不正确。
在第一行中,d 被声明为 float64,因为从无类型常量 73.0 推导出类型。但是,当您尝试将 time.Hour(时间.Duration)除以 d(float64)时,Go 会引发类型不匹配错误,因为您无法直接对不同类型进行操作。
使其工作:
要使这条线起作用,您需要将 d 转换为 time.Duration。有几种方法可以做到这一点:
- 显式转换: s := time.Hour / time.Duration(d)
- 类型转换: s := 时间.小时 / time.Duration(d)
- 持续时间分配: d := time.Duration(73.0)
或者,您可以将 time.Hour 转换为 float64 ,执行除法,并将结果转换回time.Duration:
d := 73.5 s := time.Duration(float64(time.Hour) / d)
理解非类型化常量:
非类型化常量可以根据使用的上下文而采用不同的类型。在本例中,无类型常量 73.0 采用 float64 类型,因为它在分配给 float64 变量 d 的表达式中使用。但是,在表达式 time.Hour / 73.0 中,该常量被转换为 time.Duration,因为它用于具有 time.Duration 值的运算。
以上是为什么 `time.Hour / 73.0` 在 Go 中可以工作,但 `time.Hour / d` 却失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)