以分数持续时间睡眠
在 Go 中,可以以分数持续时间睡眠,从而可以精确控制睡眠时长。但是,使用分数时必须考虑某些限制。
使用无类型常量
考虑以下代码:
s := time.Hour/73.0 time.Sleep(s)
此代码成功运行并休眠所需的分数持续时间。无类型数值常量可以采用不同的类型,具体取决于使用它们的上下文。在这种情况下,73.0 成为 time.Duration,因为右侧表达式需要它。
由于类型不匹配而失败
但是,以下代码失败并显示类型不匹配错误:
d := 73.0 s := time.Hour/d time.Sleep(s)
此失败的原因是 d 是 float64 默认。尝试将 time.Hour 除以 d 时,类型不匹配。
分数的显式转换
为了使后面的代码正常工作,需要显式转换为时间.Duration 是必需的:
d := 73.0 s := time.Hour / time.Duration(d) time.Sleep(s)
或者,您也可以使用正确的值来声明 d类型:
d := time.Duration(73.0) s := time.Hour / d time.Sleep(s)
非整数分数的注意事项
如果持续时间的小数部分不能表示为 int64,就像分数更大的情况一样大于 2^53,您需要将 time.Hour 转换为 float64,执行除法,然后将结果转换回时间.持续时间:
d := 73.5 s := time.Duration(float64(time.Hour) / d) time.Sleep(s)
以上是在 Go 中如何精确地休眠小数时间持续时间?的详细内容。更多信息请关注PHP中文网其他相关文章!