gofloat64⽐较_Go语⾔为什么没有MinMax(int,int)函数?
Go中⽂⽹导读:你在使⽤过程中是否有过这样的困惑,或者你可能使⽤的⽅式就是错误的!
现象
我们知道Go语⾔math包⾥⾯定义了min/max函数,但是是float64类型的,⽽并没有整数类型的min/max。
Go语⾔的math包⾥⾯定义的min/max函数签名如下:
int函数啥意思
math.Min(float64, float64) float64math.Max(float64, float64) float64
事实上我们更经常要⽐较的是两个整数的场景:
math.Min/Max(int, int), ormath.Min/Max(int64, int64)
解释
那么,为什么Go语⾔不提供整数类型的min/max这两个函数呢? 下⾯的这篇⽂章给了⼀个解释:
总结起来,主要理由是说,
1. 由于float64类型要处理infinity和not-a-number这种值,⽽它们的处理⾮常复杂,⼀般⽤户处理不好,所有Go需要为⽤户提供系统
级别的解决办法。
2. 对于int/int64类型的数据,min/max的实现⾮常简单直接,⽤户完全可以⾃⼰实现,例如:(通过使⽤ math.Max/Min,直接强制类
型转换可能会有问题)
func Min(x, y int64) int64 { if x < y { return x } return y}
结论就是说Go希望⽤户⾃⼰来实现如此简单的函数。
这个时候,很多⼈就会有疑问:
因为min/max(int, int)的使⽤如此的常见,难道需要⽤户在每⼀个⾃⼰的项⽬⾥⾯都实现⼀份min/max的代码吗?为什么不放在系统库例如math⾥⾯,⽅便所有⼈使⽤呢?
总结建议
我认为,除了以上理由,还有⼀个理由可能是因为 Go 语⾔不⽀持函数重载,不⽀持泛型,在 math 包提供不⽅便,也许有了 Go2 有了泛型,会有更好的解决⽅案。
整体上,Go语⾔标准库将⼀些复杂的功能做了封装,但简单的⼀些功能,Go的原则还是希望⽤户⾃⼰实现。所以,我觉得Go的爱好者们,
应该有⾃⼰的⼀套常⽤辅助⽅法包,其他项⽬引⽤该包即可。