Go语言为什么没有Min/Max函数

 go教练   2019-06-12 15:09   16 人阅读  0 条评论

我们知道Go语言math包里面定义了min/max函数,但是是float64类型的,而并没有整数类型的min/max。

Go语言的math包里面定义的min/max函数签名如下:

math.Min(float64,float64)float64math.Max(float64, float64)float64

事实上我们更经常要比较的是两个整数的场景:

math.Min/Max(int,int),ormath.Min/Max(int64,int64)

 微信截图_20190612093711.png

那么,为什么Go语言不提供整数类型的min/max这两个函数呢? 我们一起来看看吧

首先不要乱用math包的Max/Min,链接:https://mrekucci.blogspot.jp/2015/07/dont-abuse-mathmax-mathmin.html

总结起来,主要理由是说,

由于float64类型要处理infinity和not-a-number这种值,而它们的处理非常复杂,一般用户处理不好,所有Go需要为用户提供系统级别的解决办法。

对于int/int64类型的数据,min/max的实现非常简单直接,用户完全可以自己实现,例如:(通过使用 math.Max/Min,直接强制类型转换可能会有问题)

func Min(x, y int64) int64 { if x <>

return x } return y}

结论就是说Go希望用户自己来实现如此简单的函数。

这个时候,很多人就会有疑问:

因为min/max(int,int)的使用如此的常见,难道需要用户在每一个自己的项目里面都实现一份min/max的代码吗?为什么不放在系统库例如math里面,方便所有人使用呢?

 微信截图_20190612093727.png

除了以上理由,还有一个理由可能是因为Go语言不支持函数重载,不支持泛型,在math包提供不方便,也许有了Go2有了泛型,会有更好的解决方案。

整体上,Go语言标准库将一些复杂的功能做了封装,但简单的一些功能,Go的原则还是希望用户自己实现。

以上就是今天给大家介绍的Go语言为什么没有Min/Max函数,如果你还想了解更多关于Go语言的知识技巧,可以继续关注我们http://fastgolang.com/

本文地址:http://fastgolang.com/58.html
版权声明:本文为原创文章,版权归 go教练 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?