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

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

//fails
var i = 1000
time.Sleep(i * time.Millisecond)

推荐答案

Operators

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

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

除移位运算外,如果一个操作数是非类型化常数

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

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)
}

Go相关问答推荐

无法在Macos上使用Azure Speech golang SDK

租户GUID X的租户不存在self 邮箱帐户的租户(我是唯一的成员)

在GO中创建[]字符串类型的变量

为什么没有正确生成这些元组?

如何使用 go 读取 RDF xml 文件中的 XML 命名空间属性

Json.Unmarshal() 和 gin.BindJson() 之间的区别

如何从Go项目连接Microsoft Access数据库?

Golang:如何在不转义每个动作的情况下呈现模板的模板?

Go Template if 条件

使用 unsafe.Pointer 将 struct point直接转换为另一个 struct 是否安全?

将值发送到 Channel 并在就绪时读取输出

有没有办法约束(通用)类型参数?

在嵌套模板中使用变量,它也被定义为 go 模板中的变量?

为超时的单元测试创​​建 deadlineExceededError:true

使用go doc命令查看示例函数?

io.Pipe 使用困难

函数超时和 goroutine 泄漏

Ginkgo/Gomega panic 测试失败

将 Simple Go Web 应用程序部署到 Elastic Beanstalk

什么是无效字符实体 &ccb