【问题标题】:Question about operations that mix numeric types in Go关于在 Go 中混合数字类型的操作的问题
【发布时间】: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 有效? 11.1在加法中直接使用的数字类型是什么?

【问题讨论】:

  • 1 + 1.1 被评估为常量表达式。请参阅 tour.golang.org/basics/15go.dev/blog/constants 。完成整个围棋之旅真的值得花两个小时,而且比猜测和试验要简单得多。
  • 感谢 Volker,我确实通过了 Tour of Go,它确实解释了常量是什么以及如何使用 const 关键字声明常量,但它没有提到像“1 + 1.1”这样的东西评估为无类型常量,这就是我来 StackOverflow 寻求帮助的原因。无论如何,再次感谢您的帮助。

标签: go constants typechecking


【解决方案1】:

正如@Volker 所述,这是因为1 + 1.1 被评估为无类型的常量表达式。

所以下面的程序也可以工作,因为现在ab 都是无类型常量。

package main

import (
    "fmt"
)

func main() {
        const a = 1
        const b = 1.1
        fmt.Println(a + b)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-16
    • 2013-08-30
    • 2012-08-16
    • 1970-01-01
    • 2013-02-27
    • 2021-07-17
    • 2021-12-19
    • 2019-06-19
    相关资源
    最近更新 更多