golang在INT和UINT之间铸造的成本



我正在移植一些旧的C 代码,这些代码经常使用无符号整数。我可以理解它们在C 中的用途,以帮助确保仅在某些地方使用正值。

但是,我相信还有一些隐式类型的转换正在进行中,因此在GO版本中,我最终使用的代码看起来像

Node{IsTerminal: true, TerminalNo: uint(RandPostiveIntUpTo(int(fitnessCases.Terminals)))})

似乎有点不必要。我很好奇,这次演员的费用有很多(时间),我是否因切换到无处不在的INT而失去了重要的安全性?

此代码:

package main
import (
    "fmt"
    "time"
)
func main() {
    start := time.Now()
    var test uint = 3
    var tmp int
    for i := 0; i < 1000000000; i++ {
        tmp = int(test)
    }
    // Required by the compiler
    fmt.Print(tmp)
    end := time.Now()
    fmt.Print("Time elapsed: ", end.Sub(start))
}

显示了它的价格廉价。在不到3毫秒内完成了数百万个转换(我的计算机是一个相当强大的iMac,但您明白了),这可能主要是进入迭代周期而不是演员。

但是,我鼓励您使用ints并使用逻辑播放以确保值正确(例如,出于安全原因需要进行的输入验证)。

在C/C 中,类型铸件是自动化的,因此即使发生这种情况,您也不必担心INT和UINT之间的铸造。在Golang,您需要明确,但处于完全相同的情况,但添加语法问题。

相关内容

最新更新