为了账号安全,请及时绑定邮箱和手机立即绑定

Go中的惯用类型转换

Go中的惯用类型转换

Go
牧羊人nacy 2021-05-16 06:09:47
我一直在玩Go,并且想知道在Go中执行惯用的类型转换的最佳方法是什么。基本上我的问题之间的自动类型转换中规定uint8,uint64和float64。根据我在其他语言中的经验,auint8与a的乘积uint64会产生一个uint64值,但并非总是如此。这是我构建的示例,请问这是编写此代码的惯用方式还是缺少重要的语言构造。package mainimport ("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)}在我看来,由于所有显式类型转换,计算上限值似乎不必要。
查看完整描述

2 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

对于非常量值,没有隐式类型转换。


你可以写


var x float64

x = 1

但是你不能写


var x float64

var y int


y = 1

x = y

请参阅规格以供参考。


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


查看完整回答
反对 回复 2021-05-24
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

例如,


package main


import "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


查看完整回答
反对 回复 2021-05-24
  • 2 回答
  • 0 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信