代码之家  ›  专栏  ›  技术社区  ›  Abe Miessler

为什么需要将变量转换为持续时间而不是原始整数?[复制]

go
  •  4
  • Abe Miessler  · 技术社区  · 7 年前

    time.Sleep(2 * time.Second)
    

    但当我这么做的时候:

    test := 2
    time.Sleep(test * time.Second)
    

    它抛出错误

    无效操作:测试*时间。秒(类型int和

    我可以通过铸造来解决这个问题 test 是这样的: time.Sleep(time.Duration(rand.Intn(5)) * time.Second) 但我想知道为什么我要把它包起来 time.Duration 当它是一个变量而不是一个原始值时?

    1 回复  |  直到 7 年前
        1
  •  5
  •   gonutz    7 年前

    不同的是你通过了 const 2 * time.Second 还有一个 var 在第二种情况下 test := 2 . 阅读 this blog post about constants in Go 更多细节。

    2 * time.Duration 这意味着 2 time.Duration 试验:=2 test 变量。这意味着类型推断在该点发生,给出 测试 类型 int 它是文本的默认类型 . 如果你用文字 2.0 测试 变量将具有类型 float64 test * time.Second 测试 时间。持续时间