time.Millisecond*int混乱

hen*_*ald 14 go

在下面的例子中,如果1000都是int(我认为它们是),为什么底部无法编译?

//works
time.Sleep(1000 * time.Millisecond)

//fails
var i = 1000
time.Sleep(i * time.Millisecond)
Run Code Online (Sandbox Code Playgroud)

pet*_*rSO 20

运营商

运算符将操作数组合成表达式.

比较在别处讨论.对于其他二元运算符,操作数类型必须相同,除非操作涉及移位或无类型常量.对于仅涉及常量的操作,请参阅有关常量表达式的部分.

除了移位操作之外,如果一个操作数是无类型常量而另一个操作数不是,则该常量将转换为另一个操作数的类型.

例如,使用" *"(乘法)运算符,

package main

import (
    "time"
)

func main() {

    // works - 1000 is an untyped constant
    // which is converted to type time.Duration
    time.Sleep(1000 * time.Millisecond)

    // fails - v is a variable of type int
    // which is not identical to type time.Duration
    var v = 1000
    // invalid operation: i * time.Millisecond (mismatched types int and time.Duration)
    time.Sleep(v * time.Millisecond)
}
Run Code Online (Sandbox Code Playgroud)


lca*_*pra 5

您应该将转换为time.Duration(在下方int64

var i = 1000
time.Sleep(time.Duration(i) * time.Millisecond)
Run Code Online (Sandbox Code Playgroud)