为了测试并发的gorout例程,我在函数中添加了一行,使其返回的时间随机(最多一秒)
time.Sleep(rand.Int31n(1000) * time.Millisecond)
然而,当我编译时,我得到了这个错误
\履带。go:49:无效操作:rand.Int31n(1000) *时间。毫秒(类型int32和time.Duration不匹配)
什么好主意吗?如何乘以持续时间?
为了测试并发的gorout例程,我在函数中添加了一行,使其返回的时间随机(最多一秒)
time.Sleep(rand.Int31n(1000) * time.Millisecond)
然而,当我编译时,我得到了这个错误
\履带。go:49:无效操作:rand.Int31n(1000) *时间。毫秒(类型int32和time.Duration不匹配)
什么好主意吗?如何乘以持续时间?
当前回答
轮到我:
https://play.golang.org/p/RifHKsX7Puh
package main
import (
"fmt"
"time"
)
func main() {
var n int = 77
v := time.Duration( 1.15 * float64(n) ) * time.Second
fmt.Printf("%v %T", v, v)
}
记住一个简单的事实是有帮助的,那就是时间。Duration仅为int64,其中包含纳秒值。
这样,时间转换。持续时间成了一种形式。只需记住:
int64 总是nanosecs
其他回答
变量乘以时间。第二次使用以下代码
oneHr:=3600
addOneHrDuration :=time.Duration(oneHr)
addOneHrCurrTime := time.Now().Add(addOneHrDuration*time.Second)
轮到我:
https://play.golang.org/p/RifHKsX7Puh
package main
import (
"fmt"
"time"
)
func main() {
var n int = 77
v := time.Duration( 1.15 * float64(n) ) * time.Second
fmt.Printf("%v %T", v, v)
}
记住一个简单的事实是有帮助的,那就是时间。Duration仅为int64,其中包含纳秒值。
这样,时间转换。持续时间成了一种形式。只需记住:
int64 总是nanosecs
您必须将其转换为正确的格式。
yourTime := rand.Int31n(1000)
time.Sleep(time.Duration(yourTime) * time.Millisecond)
如果您将检查sleep的文档,您将看到它需要func sleep (d Duration) Duration作为参数。你的兰德。Int31n返回int32。
示例中的行工作(时间。Sleep(100 * time.Millisecond)),因为编译器足够聪明,可以理解这里常量100表示持续时间。但如果你传递一个变量,你应该强制转换它。
被一些关于Duration与Duration相乘的评论和讨论所迷惑,我玩了一些单位和函数,得到了这个:
time.Second = 1s
time.Minute = 1m0s
time.Duration(1) = 1ns
time.Duration(1) * time.Millisecond = 1ms
time.Duration(1) * time.Second = 1s
time.Duration(1) * time.Minute = 1m0s
Int32和时间。持续时间是不同的类型。您需要将int32转换为时间。持续时间:
time.Sleep(time.Duration(rand.Int31n(1000)) * time.Millisecond)