首页 >后端开发 >Golang >在 Go 中如何精确地休眠小数时间持续时间?

在 Go 中如何精确地休眠小数时间持续时间?

Susan Sarandon
Susan Sarandon原创
2024-12-05 07:53:13287浏览

How Can I Precisely Sleep for Fractional Time Durations in Go?

以分数持续时间睡眠

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn