在下面的例子中,如果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)
您应该将转换为time.Duration
(在下方int64
)
var i = 1000
time.Sleep(time.Duration(i) * time.Millisecond)
Run Code Online (Sandbox Code Playgroud)