duanhe4267 2019-08-25 19:05
浏览 2655
已采纳

为什么go没有为整数数据类型计算绝对值的功能?

In go, why there is no function which directly calculates absolute value for integer datatypes. Currently all integer values has to be type casted to float64 and then it has to be used as a parameter in math.Abs() function. And it returns float64 datatype only, which again has to be type casted into integer datatype.

Like this code is giving error as Go is statically typed language, so does not allows different datatype.

./prog.go:12:39: cannot use x (type int64) as type float64 in argument to math.Abs


import (
    "fmt"
    "math"
)

func main() {
    fmt.Println("Hello, playground")
    var x int64 = -10

    fmt.Println("Abolute value ",math.Abs(x))   
}
  • 写回答

1条回答 默认 最新

  • doujie4787 2019-08-25 20:35
    关注

    From Go's FAQ,

    The standard library's purpose is to support the runtime, connect to the operating system, and provide key functionality that many Go programs require, such as formatted I/O and networking. It also contains elements important for web programming, including cryptography and support for standards like HTTP, JSON, and XML.

    There is no clear criterion that defines what is included because for a long time, this was the only Go library. There are criteria that define what gets added today, however.

    New additions to the standard library are rare and the bar for inclusion is high. Code included in the standard library bears a large ongoing maintenance cost (often borne by those other than the original author), is subject to the Go 1 compatibility promise (blocking fixes to any flaws in the API), and is subject to the Go release schedule, preventing bug fixes from being available to users quickly.

    Most new code should live outside of the standard library and be accessible via the go tool's go get command. Such code can have its own maintainers, release cycle, and compatibility guarantees. Users can find packages and read their documentation at godoc.org.

    In response to how easy it is to create integer versions of the math package's float functions, Go team member Russ Cox once quipped,

    Ceil, Floor, and Trunc are even easier!

    A reasonable interpretation would be that since this function is trivial to write (if x < 0, x = -x), it does not meet the bar for inclusion. Compare with the float version:

    func Abs(x float64) float64 {
        return Float64frombits(Float64bits(x) &^ (1 << 63))
    }
    

    This being useful but also not obvious is a compelling reason to include it in the standard library.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题