为啥 Golang 像这样在 atoi.go 中处理截止?
Posted
技术标签:
【中文标题】为啥 Golang 像这样在 atoi.go 中处理截止?【英文标题】:why Golang handle cutoff in atoi.go like this?为什么 Golang 像这样在 atoi.go 中处理截止? 【发布时间】:2020-09-29 03:42:30 【问题描述】:// code in atoi.go, line 90
var cutoff uint64
switch base
case 10:
cutoff = maxUint64/10 + 1
case 16:
cutoff = maxUint64/16 + 1
default:
cutoff = maxUint64/uint64(base) + 1
我在 Golang 包的 atoi.go 文件中看到了一些代码,为什么不像下面这样写呢?
var cutoff = maxUint64/uint64(base) + 1
非常感谢。
【问题讨论】:
对于(到目前为止)最常见的用途来说,它的速度更快。 【参考方案1】:我认为您所指的comment above 可能会回答您的问题:
// 在常见情况下使用编译时常量。
因为maxUint64/10 + 1
和maxUint64/16 + 1
仅引用常量,编译器可以计算这一点。结果是每次调用ParseUint
时都不需要在运行时执行除法操作。您可以在commit 中查看基准。
【讨论】:
以上是关于为啥 Golang 像这样在 atoi.go 中处理截止?的主要内容,如果未能解决你的问题,请参考以下文章