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