关于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
有效? 1
和1.1
在加法中直接使用它们的数值类型是什么?
如@Volker 所述,这是因为 1 + 1.1
被评估为无类型常量表达式。
所以下面的程序也可以工作,因为现在 a
和 b
都是无类型常量。
package main
import (
"fmt"
)
func main() {
const a = 1
const b = 1.1
fmt.Println(a + b)
}
我知道 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
有效? 1
和1.1
在加法中直接使用它们的数值类型是什么?
如@Volker 所述,这是因为 1 + 1.1
被评估为无类型常量表达式。
所以下面的程序也可以工作,因为现在 a
和 b
都是无类型常量。
package main
import (
"fmt"
)
func main() {
const a = 1
const b = 1.1
fmt.Println(a + b)
}