为了账号安全,请及时绑定邮箱和手机立即绑定

time.Millisecond * int 混淆

time.Millisecond * int 混淆

Go
HUX布斯 2021-07-01 14:43:10
在下面的例子中,如果 1000's 都是 int's(我认为它们是),为什么底部无法编译?//workstime.Sleep(1000 * time.Millisecond)//failsvar i = 1000time.Sleep(i * time.Millisecond)
查看完整描述

3 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

运营商

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

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

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

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

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)

}


查看完整回答
反对 回复 2021-07-05
?
HUWWW

TA贡献1874条经验 获得超12个赞

Go 不会为您自动转换数字类型。据我了解,1000 在定义为 1 之前不是数字类型。

语言规范说:

当不同的数字类型混合在一个表达式或赋值中时,需要进行转换。例如,int32 和 int 不是同一种类型,即使它们在特定架构上可能具有相同的大小。


查看完整回答
反对 回复 2021-07-05
  • 3 回答
  • 0 关注
  • 267 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信