3 回答
TA贡献2021条经验 获得超8个赞
从 Go 的常见问题解答中,
标准库的目的是支持运行时、连接到操作系统并提供许多 Go 程序所需的关键功能,例如格式化 I/O 和网络。它还包含对 Web 编程很重要的元素,包括加密以及对 HTTP、JSON 和 XML 等标准的支持。
没有明确的标准来定义包含的内容,因为很长一段时间以来,这是唯一的 Go 库。然而,有一些标准定义了今天要添加的内容。
标准库中新增的内容很少,而且纳入的门槛很高。标准库中包含的代码需要承担大量的持续维护成本(通常由原作者以外的人承担),受到 Go 1 兼容性承诺的约束(阻止修复 API 中的任何缺陷),并且受到 Go 版本的约束安排,防止错误修复快速提供给用户。
大多数新代码应该位于标准库之外,并且可以通过 go 工具的 go get 命令访问。这样的代码可以有自己的维护者、发布周期和兼容性保证。用户可以在 godoc.org 上找到软件包并阅读其文档。
对于创建 math 包的 float 函数的整数版本是多么容易,Go 团队成员Russ Cox 曾经打趣道:
Ceil、Floor 和 Trunc 甚至更容易!
一个合理的解释是,由于这个函数编写起来很简单(如果 x < 0,x = -x),因此它不符合包含标准。与浮动版本比较:
func Abs(x float64) float64 { return Float64frombits(Float64bits(x) &^ (1 << 63)) }
这是有用但也不明显的,这是将其包含在标准库中的一个令人信服的理由。
TA贡献1796条经验 获得超10个赞
绝对值只是绝对差[1]的一种特殊情况,其中第二个值为零。这是整数的绝对值函数,以及整数的绝对差函数。Bonus 是无符号整数的绝对差函数:
package math
func absInt(x int) int {
return absDiffInt(x, 0)
}
func absDiffInt(x, y int) int {
if x < y {
return y - x
}
return x - y
}
func absDiffUint(x, y uint) uint {
if x < y {
return y - x
}
return x - y
}
https://wikipedia.org/wiki/Absolute_difference
TA贡献1829条经验 获得超4个赞
虽然没有标准功能,但您始终可以自己编写或使用第三方解决方案。该包包含Abs所有内置有符号整数类型的函数。用法(之后go get):
import (
"fmt"
"github.com/adam-lavrik/go-imath/i64" // Functions for i64 type
)
...
x := int64(-2)
fmt.Println(i64.Abs(x)) // Output: 2
x = i64.Minimal // Minimal negative value of int64, has no positive pair
fmt.Println(i64.Absu(x)) // Output: 9223372036854775808 (result is converted to uint64)
- 3 回答
- 0 关注
- 163 浏览
添加回答
举报