Go 为什么必须将整数转换为float64才能进行类型匹配?
我一直在玩围棋,在运行以下代码时遇到了围棋的(非?)功能:Go 为什么必须将整数转换为float64才能进行类型匹配?,go,Go,我一直在玩围棋,在运行以下代码时遇到了围棋的(非?)功能: a := 1 //int b := 1.0 //float64 c := a/b //should be float64 当我运行此命令时,出现以下运行时错误: invalid operation: a / b (mismatched types int and float64) 我认为GoLang应该很擅长类型推断。为什么我有必要写: c := float64(a)/b //float64 通常,给定两
a := 1 //int
b := 1.0 //float64
c := a/b //should be float64
当我运行此命令时,出现以下运行时错误:
invalid operation: a / b (mismatched types int and float64)
我认为GoLang应该很擅长类型推断。为什么我有必要写:
c := float64(a)/b //float64
通常,给定两种数字类型,c应该被推断为包含这两种类型的最小类型。我不认为这是一个疏忽,所以我只是想弄清楚为什么会做出这样的决定。仅出于可读性原因?或者我建议的行为会导致语言或其他方面的逻辑不一致吗?常见问题解答中提到了这一点: 在C语言中,数字类型之间自动转换的便利性被它引起的混乱所抵消。表达式何时未签名?价值有多大?溢出来了吗?结果是否可移植,独立于执行它的机器?
它还使编译器复杂化 这就是为什么您需要:
- 要执行显式,请执行以下操作:
c := float64(a)/b
- 或者使用
var float64
var a, b float64 a = 1 //float64 b = 1.0 //float64 c := a/b
a
成为一个非类型常量(即const i=1
)可以避免显式转换的需要。@DaveC是的,我昨晚读到了。这是一个很好的阅读,为我澄清了一些细节。