我一直在玩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应该被推断为包含两者的最小类型.我不认为这是一种疏忽,所以我只是想弄清楚为什么这种行为已经决定了.仅出于可读性原因?或者我的建议行为是否会导致语言或其他某种逻辑上的不一致?
常见问题解答中提到了这一点:为什么Go不提供隐式数字转换?
C中数字类型之间自动转换的便利性被它引起的混乱所抵消.何时表达式未签名?价值有多大?它溢出了吗?结果是否可移植,与其执行的机器无关?
它还使编译器复杂化.
这就是你需要的原因:
要么进行显式类型转换:
c := float64(a)/b
Run Code Online (Sandbox Code Playgroud)或使用 var float64
var a, b float64
a = 1 //float64
b = 1.0 //float64
c := a/b
Run Code Online (Sandbox Code Playgroud)