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 cocos的js代码调用wx.createUseInfoButton问题!
  • ¥15 关于自相关函数法和周期图法实现对随机信号的功率谱估计的matlab程序运行的问题,请各位专家解答!
  • ¥15 Python程序,深度学习,有偿私
  • ¥15 扫描枪扫条形码出现问题
  • ¥35 poi合并多个word成一个新word,原word中横版没了.
  • ¥15 【火车头采集器】搜狐娱乐这种列表页网址,怎么采集?
  • ¥15 求MCSCANX 帮助
  • ¥15 机器学习训练相关模型
  • ¥15 Todesk 远程写代码 anaconda jupyter python3
  • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?