猿问

Go中的惯用类型转换

我一直在玩Go,并且想知道在Go中执行惯用的类型转换的最佳方法是什么。基本上我的问题之间的自动类型转换中规定uint8,uint64和float64。根据我在其他语言中的经验,auint8与a的乘积uint64会产生一个uint64值,但并非总是如此。


这是我构建的示例,请问这是编写此代码的惯用方式还是缺少重要的语言构造。


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)

}

在我看来,由于所有显式类型转换,计算上限值似乎不必要。


牧羊人nacy
浏览 195回答 2
2回答

大话西游666

对于非常量值,没有隐式类型转换。你可以写var x float64x = 1但是你不能写var x float64var y inty = 1x = y请参阅规格以供参考。有一个很好的理由,不允许自动/隐式类型转换,因为它们可能变得非常混乱,并且必须学习许多规则来规避可能发生的各种警告。以C中的整数转换规则为例。

小怪兽爱吃肉

例如,package mainimport "fmt"func CeilUint(a, b uint64) uint64 {    return (a + (b - 1)) / b}func main() {    const Width = 64    var index uint32 = 100    var bits uint8 = 3    var c uint64 = CeilUint(uint64(index)*uint64(bits), Width)    fmt.Println("Test:", c)}输出:Test: 5
随时随地看视频慕课网APP

相关分类

Go
我要回答