在int和uint之间进行转换的Golang成本

时间:2017-12-12 22:56:36

标签: go casting integer

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

但是我相信还有一些隐式类型转换正在进行中所以在go版本中我最终得到的代码看起来像

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

这似乎有点不必要。我很好奇,这个演员有多少(时间)成本,而且我在任何地方转换到使用int都会失去任何重要的安全性吗?

1 个答案:

答案 0 :(得分:0)

此代码:

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,但你明白了这一点),这可能主要是进入迭代周期,而不是演员。

但是,我建议您使用整数并使用逻辑来确保值正确(例如,出于安全原因需要进行输入验证)。

在C / C ++中,类型转换是自动的,所以你不必担心在int和uint之间进行转换,即使它正在发生。在golang中,你需要明确它,但你处于完全相同的情况,但增加了语法问题。