我一直在玩Go,在运行以下代码时遇到Go的(非?)功能:
b
当我运行此操作时,我收到以下运行时错误:
a := 1 //int
b := 1.0 //float64
c := a/b //should be float64
我认为GoLang在类型推断方面应该是相当不错的。我为什么要写这个:
invalid operation: a / b (mismatched types int and float64)
通常,给定两种数字类型,c应该被推断为包含两者的最小类型。我不认为这是一种疏忽,所以我只是想弄清楚为什么这种行为已经决定了。仅出于可读性原因?或者我的建议行为是否会导致语言或其他方面存在某种逻辑上的不一致?
答案 0 :(得分:7)
常见问题解答中提到了这一点:Why does Go not provide implicit numeric conversions?
C中数字类型之间自动转换的便利性被它引起的混乱所抵消。何时表达式未签名?价值有多大?它溢出了吗?结果是否可移动,与其执行的机器无关? 它还使编译器复杂化。
这就是你需要的原因:
要么做一个明确的 type conversion :
c := float64(a)/b
或使用var float64
var a, b float64
a = 1 //float64
b = 1.0 //float64
c := a/b