关于Go中混合数字类型的操作的问题

Question about operations that mix numeric types in Go

我知道 Go 是一种静态类型的语言,不允许混合数字类型的操作,例如,您不能将 int 添加到 float64:

package main

import (
    "fmt"
)

func main() {
        var a int = 1
        var b float64 = 1.1
        fmt.Println(a + b)
}

运行这个程序会报错:

invalid operation: a + b (mismatched types int and float64)

但是当我在没有声明变量的情况下进行数学运算 1 + 1.1 时,程序 returns 得到了想要的结果 2.1:

package main

import (
    "fmt"
)

func main() {
        fmt.Println(1 + 1.1)
}

所以我的问题是:为什么 1 + 1.1 有效? 11.1在加法中直接使用它们的数值类型是什么?

如@Volker 所述,这是因为 1 + 1.1 被评估为无类型常量表达式。

所以下面的程序也可以工作,因为现在 ab 都是无类型常量。

package main

import (
    "fmt"
)

func main() {
        const a = 1
        const b = 1.1
        fmt.Println(a + b)
}