golang为什么没有min/max(int, int)函数
我们知道go语言math包里面定义了min/max函数,但是是float64类型的,而并没有整数类型的min/max。
go语言的math包里面定义的min/max函数如下:
math.Min(float64, float64) float64
math.Max(float64, float64) float64
事实上我们更经常要比较的是两个整数的场景:
math.Min/Max(int, int), or
math.Min/Max(int64, int64)
那么,为什么go语言不提供整数类型的min/max这两个函数呢? 下面的这篇文章给了一个解释:
https://mrekucci.blogspot.jp/2015/07/dont-abuse-mathmax-mathmin.html
总结起来,主要理由是说,
- 由于float64类型要处理infinity和not-a-number这种值,而他们的处理非常复杂,一般用户没有能力,所有go需要为用户提供系统级别的解决办法。
- 对于int/int64类型的数据,min/max的实现非常简单直接,用户完全可以自己实现,例如:
func Min(x, y int64) int64 {
if x < y {
return x
}
return y
}
结论就是说go希望用户自己来实现如此简单的函数。
那么我的问题是:
因为min/max(int, int)的使用也如此的常见,难道需要用户在每一个自己的项目里面都实现一份min/max的代码吗,为什么不放在系统库例如math里面,方便所有人使用呢?