我正在移植一些旧的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,您需要明确,但处于完全相同的情况,但添加语法问题。