我一直在玩Go,想知道在Go中执行惯用的类型转换的最佳方法是什么。基本上我的问题之间的自动类型转换中规定uint8,uint64和float64。根据我在其他语言中的经验,a uint8与a 的乘积uint64会产生一个uint64值,但并非总是如此。
uint8
uint64
float64
这是我构建的示例,请问这是编写此代码的惯用方式还是缺少重要的语言构造。
package main import ("math";"fmt") const(Width=64) func main() { var index uint32 var bits uint8 index = 100 bits = 3 var c uint64 // This is the line of interest vvvv c = uint64(math.Ceil(float64(index * uint32(bits))/float64(Width))) fmt.Println("Test: %v\n", c) }
在我看来,由于所有显式类型转换,计算上限值似乎不必要。
谢谢!
对于非常量值,没有隐式类型转换。
你可以写
var x float64 x = 1
但是你不能写
var x float64 var y int y = 1 x = y
请参阅规格以供参考。
有一个很好的理由,不允许自动/隐式类型转换,因为它们可能变得非常混乱,并且必须学习许多规则来规避可能发生的各种警告。以C中的整数转换规则为例。