在Go中,为什么没有直接计算整数数据类型绝对值的函数?目前,所有整数值都必须被类型转换为float64,然后传递到math.Abs()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,

标准库的目的是支持运行时,连接到操作系统,并提供许多围棋程序所需的关键功能,如格式化I/O和联网.它还包含对Web编程很重要的元素,包括加密和对HTTP、JSON和XML等标准的支持.

没有明确的标准来定义所包含的内容,因为长期以来,这是唯一的Go库.然而,有一些标准定义了今天添加的内容.

标准库中的新成员很少,而且包含的门槛很高.标准库中包含的代码承担大量的持续维护成本(通常由原始作者以外的人承担),遵守Go 1兼容性promise (阻止修复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))
}

这很有用,但也不明显,这是将其包含在标准库中的一个令人信服的理由.

Go相关问答推荐

+在具有html/模板Golang的Base64中

切换选项卡时,Goland IDE中的光标自动转移

Go Regexp:匹配完整的单词或子字符串,或者根本不匹配

Golang XML密钥名称冲突

使用Go使用Gorm使用外键对数据进行排序

通过 Terraform 中的 MapNestedAtribute 进行迭代

在 GoLang 中对自定义 struct 体数组进行排序

我突然无法再将我的 GoLang 应用程序部署到 Google AppEngine

甚至用天真的洗牌分配?

使用 unsafe.Pointer 将 struct point直接转换为另一个 struct 是否安全?

如何将元素从一个切片移动到另一个切片

Go 信号处理程序不处理终端窗口关闭

访问传递给可变参数函数的通用 struct 的特定字段

无法建立连接,因为目标机器主动拒绝它 Golang

如何在Golang中的差异函数中杀死命令Exec

Unescape 在 rss 中两次逃脱了标题

从另一个没有重复的确定性 int

try 执行`go test ./... -v`时,Golang中有没有办法设置标志

在 Go 泛型中,如何对联合约束中的类型使用通用方法?

如何正确解组不同类型的数组?