随机sleep出错了

time.Sleep(time.Second * rand.Intn(10))

为什么*后面跟数字可以,而Intn函数就不行?Intn的返回值是int啊。

阅读 2.4k
2 个回答
rand.Seed(time.Now().Unix())
r := rand.Intn(10)
time.Sleep(time.Duration(r) * time.Second)

golang对于纯数字在编译的时候会自动做类型转换,例如

time.Sleep(time.Second * 5)

这时golang会将5转换为time.Duration类型进行运算

而对于不同类型,如果需要运算,必须显示的做强制转换,
比如,time.Second * rand.Intn(10),其实是 time.Duration 和 int 这两种类型的操作
必须将其转换为同一类型:

time.Sleep(time.Second * time.Duration(rand.Intn(10)))

例如如下定义,虽然都是5,但是完全是不同的类型,不能直接相互做运算操作

    var f float32 = 5
    var f2  float64 = 5
    var i int = 5
    var i2 int32 = 5

还有:

type myInt int

这里定义了新类型myInt,其本质和int没啥区别,但是也不能相互做运算,必须强制转换。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题