如何将持续时间乘以整数?

新手上路,请多包涵

为了测试并发 goroutines,我在一个函数中添加了一行,让它花一个随机时间返回(最多一秒)

 time.Sleep(rand.Int31n(1000) * time.Millisecond)

但是当我编译时,我得到了这个错误

.\crawler.go:49: 无效操作:rand.Int31n(1000) * time.Millisecond(int32 和 time.Duration 类型不匹配)

有任何想法吗?我怎样才能乘以持续时间?

原文由 Colonel Panic 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 687
2 个回答

int32time.Duration 是不同的类型。您需要将 int32 转换为 time.Duration

 time.Sleep(time.Duration(rand.Int31n(1000)) * time.Millisecond)

原文由 mna 发布,翻译遵循 CC BY-SA 4.0 许可协议

您必须将其转换为正确格式的 Playground

 yourTime := rand.Int31n(1000)
time.Sleep(time.Duration(yourTime) * time.Millisecond)


如果您查看 sleep 的文档,您会发现它需要 func Sleep(d Duration) duration 作为参数。您的 rand.Int31n 返回 int32

示例中的行有效( time.Sleep(100 * time.Millisecond) ),因为编译器足够聪明,可以理解这里 常量 100 表示持续时间。但是如果你传递一个变量,你应该转换它。

原文由 Salvador Dali 发布,翻译遵循 CC BY-SA 3.0 许可协议

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