go - 为什么 Go 没有计算整数绝对值的函数?
问题描述
在 Go 中,为什么没有直接计算整数数据类型绝对值的函数?目前,所有整数值都必须被类型转换为float64
然后传递给math.Abs()
,它返回 a 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))
}
解决方案
标准库的目的是支持运行时,连接到操作系统,并提供许多 Go 程序所需的关键功能,例如格式化 I/O 和网络。它还包含对 Web 编程很重要的元素,包括加密和对 HTTP、JSON 和 XML 等标准的支持。
没有明确的标准来定义包含的内容,因为长期以来,这是唯一的 Go 库。但是,有一些标准可以定义今天添加的内容。
标准库的新增内容很少见,并且包含的门槛很高。包含在标准库中的代码需要承担大量的持续维护成本(通常由原作者以外的人承担),受 Go 1 兼容性承诺(阻止对 API 中的任何缺陷的修复)的约束,并且受 Go 版本的约束计划,防止错误修复快速提供给用户。
大多数新代码应该存在于标准库之外,并且可以通过 go 工具的 go get 命令访问。这样的代码可以有自己的维护者、发布周期和兼容性保证。用户可以在 godoc.org 上找到包并阅读他们的文档。
为了回应创建数学包的浮点函数的整数版本是多么容易,Go 团队成员Russ Cox 曾经打趣道,
Ceil、Floor 和 Trunc 更简单!
一个合理的解释是,由于这个函数写起来很简单(如果 x < 0,x = -x),它不符合包含的标准。与浮动版本比较:
func Abs(x float64) float64 {
return Float64frombits(Float64bits(x) &^ (1 << 63))
}
这很有用但也不明显,这是将其包含在标准库中的一个令人信服的理由。
推荐阅读
- javascript - 在javascript中定义对象时,星号大括号*{是什么意思
- ios - Swift iOS 试图即时更改 UITextAutocapitalization 类型
- vba - 在两个工作簿都打开时将数据从一个工作簿复制到另一个工作簿
- python - Python:无法将“列表”对象隐式转换为 str
- c++ - 如何在“=”运算符的帮助下在 C++ 中传递参数
- java - Android NDK:Java JVM openjdkjvmti::MethodUtil::GetMethodName 崩溃
- next.js - 当覆盖 _app.js 时 getInitialProps 用于什么?
- ffmpeg - 使用 youtube-dl 和 ffmpeg(或 vlc)将 YouTube 直播流转码为 rtsp rtmp udp rtp
- c - 更改 STM32 上的硬件流控制引脚
- android-studio - 如何在 Android Studio 的 README.md 文件中禁用代码检查错误