编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天编程网就整理分享《为什么Go没有计算整数绝对值的函数?》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过编程网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。
问题内容go中为什么没有直接计算整数数据类型绝对值的函数?目前,所有整数值都必须类型转换为 float64
,然后传递给 math.abs()
,它返回一个 float64
,它再次必须类型转换为整数。
此代码引发 ./prog.go:12:39: cannot use x (type int64) as type float64 in argument to math.abs
错误,因为 go 是静态类型语言,因此它不允许使用不同的类型数据类型:
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println("Hello, playground")
var x int64 = -10
fmt.Println("Abolute value ", math.Abs(x))
}
解决方案
From Go's FAQ,
标准库的目的是支持运行时、连接到操作系统并提供许多 go 程序所需的关键功能,例如格式化 i/o 和网络。它还包含对 web 编程很重要的元素,包括加密以及对 http、json 和 xml 等标准的支持。
没有明确的标准来定义包含的内容,因为很长一段时间以来,这是唯一的 go 库。然而,有一些标准定义了今天添加的内容。
标准库中新增的内容很少,而且纳入的门槛很高。标准库中包含的代码需要承担大量的持续维护成本(通常由原作者以外的人承担),受到 go 1 兼容性承诺的约束(阻止修复 api 中的任何缺陷),并且受到 go 版本的约束安排,防止错误修复快速提供给用户。
大多数新代码应该位于标准库之外,并且可以通过 go 工具的 go get 命令访问。这样的代码可以有自己的维护者、发布周期和兼容性保证。用户可以在 godoc.org 上找到软件包并阅读其文档。
为了回应创建数学包的浮点函数的整数版本是多么容易,go 团队成员 Russ Cox once quipped,
ceil、floor 和 trunc 更加简单!
一个合理的解释是,由于这个函数编写起来很简单(如果 x < 0, x = -x),因此它不符合包含标准。与float version比较:
func abs(x float64) float64 {
return float64frombits(float64bits(x) &^ (1 << 63))
}
这是有用但也不明显的,这是将其包含在标准库中的一个令人信服的理由。
绝对值只是绝对差的一种特殊情况 [1],其中 第二个值为零。这是整数的绝对值函数,以及 整数的绝对差函数。奖金是绝对差异 无符号整数函数:
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
以上就是《为什么Go没有计算整数绝对值的函数?》的详细内容,更多关于的资料请关注编程网公众号!