Go 为什么int*time.Duration有效,但<;计算结果为int>;*时间,不是吗?

Go 为什么int*time.Duration有效,但<;计算结果为int>;*时间,不是吗?,go,Go,这个片段 package main import ( "fmt" "time" ) func main() { var x = 2 fmt.Println(5 * time.Hour) fmt.Println(2 * 5 * time.Hour) fmt.Println(x * 5 * time.Hour) } 是否会在/prog.go:12:20:invalid operation:x*5*time.Hour(不匹配的int和time.Du

这个片段

package main

import (
    "fmt"
    "time"
)

func main() {
    var x = 2
    fmt.Println(5 * time.Hour)
    fmt.Println(2 * 5 * time.Hour)
    fmt.Println(x * 5 * time.Hour)
}
是否会在
/prog.go:12:20:invalid operation:x*5*time.Hour(不匹配的int和time.Duration类型)
中出错,这非常奇怪,因为x是int


但是,如果您使用
const x=2
,那么它符合……有人能解释这种行为吗?

我的第一个猜测是可能涉及到常数折叠。
fmt.Println(2*5*time.Hour)
被编译成
fmt.Println(10*time.Hour)
。我的第一个猜测是可能涉及到常数折叠。
fmt.Println(2*5*time.Hour)
被编译成
fmt.Println(10*time.Hour)