为什么我必须将整数转换为float64以匹配类型?

bre*_*den 7 go

我一直在玩Go,我在运行以下代码时遇到了Go的(非?)功能:

a := 1     //int
b := 1.0   //float64

c := a/b   //should be float64
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到以下运行时错误:

invalid operation: a / b (mismatched types int and float64) 
Run Code Online (Sandbox Code Playgroud)

我认为GoLang应该对类型推断很好.我为什么要写:

c := float64(a)/b    //float64
Run Code Online (Sandbox Code Playgroud)

通常,给定两种数字类型,c应该被推断为包含两者的最小类型.我不认为这是一种疏忽,所以我只是想弄清楚为什么这种行为已经决定了.仅出于可读性原因?或者我的建议行为是否会导致语言或其他某种逻辑上的不一致?

Von*_*onC 9

常见问题解答中提到了这一点:为什么Go不提供隐式数字转换?

C中数字类型之间自动转换的便利性被它引起的混乱所抵消.何时表达式未签名?价值有多大?它溢出了吗?结果是否可移植,与其执行的机器无关?
它还使编译器复杂化.

这就是你需要的原因: