Go 时间。毫秒*整数混乱
在下面的示例中,如果1000都是int(我认为是),为什么底部无法编译Go 时间。毫秒*整数混乱,go,Go,在下面的示例中,如果1000都是int(我认为是),为什么底部无法编译 //works time.Sleep(1000 * time.Millisecond) //fails var i = 1000 time.Sleep(i * time.Millisecond) Go不会为您自动转换数字类型。据我所知,1000在定义为1之前不是数字类型 语言规范说: 当表达式或赋值中混合了不同的数值类型时,需要进行转换。例如,int32和int不是相同的类型,即使它们在特定体系结构上可能具有相同的大小
//works
time.Sleep(1000 * time.Millisecond)
//fails
var i = 1000
time.Sleep(i * time.Millisecond)
Go不会为您自动转换数字类型。据我所知,1000在定义为1之前不是数字类型 语言规范说: 当表达式或赋值中混合了不同的数值类型时,需要进行转换。例如,int32和int不是相同的类型,即使它们在特定体系结构上可能具有相同的大小 运算符将操作数组合成表达式 其他地方讨论了比较。对于其他二进制运算符 除非操作涉及移位,否则操作数类型必须相同 或非类型化常量。有关仅涉及常数的操作,请参见 关于常量表达式的部分 除移位操作外,如果一个操作数是非类型常量,则 如果另一个操作数不是,则常量将转换为 其他操作数 例如,使用“
*
”(乘法)运算符
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)
}
两个操作符的类型必须相同time.Duration。您可以使用time.Sleep(v*time.毫秒)。您应该转换为
time.Duration
(下面是int64
)
如果您主要对命名值感兴趣,可以将
i
设置为常量而不是变量:
主程序包
进口(
“时间”
)
func main(){
//作品:
时间。睡眠(1000*时间。毫秒)
//工程还包括:
常数i=1000
时间。睡眠(i*时间。毫秒)
}
回复:显示错误消息。错误消息:
无效操作:i*time.millished(int和time.Duration类型不匹配)
@Kavu-huh。。。让我惊讶的是前者的工作原理,然后是相关的:@nemo:它是如何相关的?1000
是一个非类型的数字常量。谢谢-我被困在这上面了!
var i = 1000
time.Sleep(time.Duration(i) * time.Millisecond)