Go中的惯用语类型转换

gru*_*zip 7 go

我正在玩Go,并想知道在Go中执行惯用类型转换的最佳方法是什么.基本上我的问题之间的自动类型转换中规定uint8,uint64float64.根据我对其他语言的经验,a uint8与a 的乘法uint64将产生一个uint64值,但在go中则不然.

这是我构建的一个示例,我问这是否是编写此代码的惯用方法,或者我是否缺少重要的语言结构.

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)
}
Run Code Online (Sandbox Code Playgroud)

从我的观点来看,由于所有显式类型转换,上限值的计算似乎不必要复杂.

谢谢!

nem*_*emo 6

非常量值没有隐式类型转换.

你可以写

var x float64
x = 1
Run Code Online (Sandbox Code Playgroud)

但你不能写

var x float64
var y int

y = 1
x = y
Run Code Online (Sandbox Code Playgroud)

请参阅规格以供参考.

有一个很好的理由,不允许自动/隐式类型转换,因为它们可能变得非常混乱,并且必须学习许多规则来规避可能发生的各种警告.以C中整数转换规则为例.