我遇到过这样一种情况,我在常量中有一些整数值并将其与math.Pi常量相乘,如下所示:func main() { const a = 5 fmt.Printf("%v", a*math.Pi)}在执行时,它给出以下结果:15.707963267948966但是,当我将常量更改为变量 ( variable a)时,如下所示:func main() { a := 5 fmt.Printf("%v", a*math.Pi)}编译时出现以下错误:constant 3.14159 truncated to integer据我所知,隐式数字类型转换在表达式的所有操作数都是常量时有效,但在其中任何一个变量时无效。但是为什么会这样呢?
1 回答
慕标琳琳
TA贡献1830条经验 获得超9个赞
它的发生是因为 Go 的无类型常量。在这两种情况下,您都没有明确指定类型。
在第一种情况下,您正在定义一个无类型常量(您也可以使用 定义一个有类型常量const a float64 = 5
)。对于无类型常量,只有在需要类型的上下文中使用时才会推断出类型——即当您将它与 math.Pi 相乘时,编译器将“猜测”您想要在那里有一个浮点数,以及所有内容工作正常。
在第二种情况下,一个变量当然必须有一个类型,所以类型推断发生在声明变量的时候,因为你使用了“5”,编译器将“推断”出 int,并且将 int 和 float 相乘是在围棋中不可能。您可以使用 ega:=5.0
或var a float64 = 5
将 a 声明为 float64,那么此代码也可以正常工作。
- 1 回答
- 0 关注
- 77 浏览
添加回答
举报
0/150
提交
取消