在 Go 中,当尝试对持续时间、浮点数和无类型常量执行操作时,您可能会遇到不同的行为。下面仔细看看两行类似的代码,以及为什么其中一行可以工作而另一行不行。
表达式 time.Hour / 73.0 是简短的变量声明。右侧表达式是 time.Duration(一小时的常量值)和无类型数值常量 (73.0) 之间的除法。
由于 time.Duration 是整数类型 (int64),因此无类型数值常量常量转换为 time.Duration (不损失精度)。因此,除法将得到一个 time.Duration 值,该值可用于睡眠指定的一小时。
相反,表达式 time.Hour / d 失败,因为 d 的类型不正确。
在第一行中,d 被声明为 float64,因为从无类型常量 73.0 推导出类型。但是,当您尝试将 time.Hour(时间.Duration)除以 d(float64)时,Go 会引发类型不匹配错误,因为您无法直接对不同类型进行操作。
要使这条线起作用,您需要将 d 转换为 time.Duration。有几种方法可以做到这一点:
或者,您可以将 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中文网其他相关文章!