【发布时间】:2021-09-06 06:23:32
【问题描述】:
我知道 Go 是一种静态类型语言,它不允许混合数字类型的操作,例如,你不能将 int 添加到 float64:
package main
import (
"fmt"
)
func main() {
var a int = 1
var b float64 = 1.1
fmt.Println(a + b)
}
运行这个程序会报错:
无效操作:a + b(不匹配的类型 int 和 float64)
但是当我在没有声明变量的情况下计算 1 + 1.1 时,程序会返回所需的结果,即 2.1:
package main
import (
"fmt"
)
func main() {
fmt.Println(1 + 1.1)
}
所以我的问题是:为什么1 + 1.1 有效? 1和1.1在加法中直接使用的数字类型是什么?
【问题讨论】:
-
1 + 1.1被评估为常量表达式。请参阅 tour.golang.org/basics/15 和 go.dev/blog/constants 。完成整个围棋之旅真的值得花两个小时,而且比猜测和试验要简单得多。 -
感谢 Volker,我确实通过了 Tour of Go,它确实解释了常量是什么以及如何使用 const 关键字声明常量,但它没有提到像“1 + 1.1”这样的东西评估为无类型常量,这就是我来 StackOverflow 寻求帮助的原因。无论如何,再次感谢您的帮助。
标签: go constants typechecking