doushi2047 2018-10-23 10:32
浏览 80
已采纳

隐式类型转换常量与变量

I have faced a situation where I have some integer value in a constant and multiplying it with math.Pi constant as below:

func main() {
    const a = 5
    fmt.Printf("%v", a*math.Pi)
}

On execution it gives following result:

15.707963267948966

But, when I change the constant to variable (variable a) as below:

func main() {
    a := 5
    fmt.Printf("%v", a*math.Pi)
}

On compilation it gives the following error:

constant 3.14159 truncated to integer

As far as I understand implicit numeric type conversion is working when all operands of expression are constants, but not working when any of these a variable.

But why is this happening?

  • 写回答

1条回答 默认 最新

  • duanjia4969 2018-10-23 11:52
    关注

    It's happening because of Go's untyped constants. In both cases, you are not explicitly specifying a type.

    In the first case, you are defining an untyped constant (you could also define a typed constant by using const a float64 = 5). For an untyped constant, a type will only be inferred when it’s used in a context that requires a type – i.e. when you are multiplying it with math.Pi, the compiler will "guess" that you want to have a float there, and everything works fine.

    In the second case, a variable of course has to have a type, so the type inference takes place when declaring the variable, and since you used "5", the compiler will "infer" int, and multiplying an int and a float is not possible in Go. You could use e.g. a:=5.0 or var a float64 = 5 to declare a as a float64, then this code would work as well.

    See this blog post for more details.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c