为啥 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 + 1maxUint64/16 + 1 仅引用常量,编译器可以计算这一点。结果是每次调用ParseUint 时都不需要在运行时执行除法操作。您可以在commit 中查看基准。

【讨论】:

以上是关于为啥 Golang 像这样在 atoi.go 中处理截止?的主要内容,如果未能解决你的问题,请参考以下文章

为啥添加并发会减慢这个 golang 代码?

在 PHP 中处理货币值的最佳实践?

在视图控制器中处理发送给第一响应者的消息

手指移动的变形精灵

为啥我不能像这样实例化一个对象? [复制]

Golang 中关于闭包的坑