Go中文网导读:你在使用过程中是否有过这样的困惑,或者你可能使用的方式就是错误的!
我们知道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这两个函数呢? 下面的这篇文章给了一个解释:
“不要乱用 math 包的 Max/Min”,链接:https://mrekucci.blogspot.jp/2015/07/dont-abuse-mathmax-mathmin.html
总结起来,主要理由是说,
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的爱好者们,应该有自己的一套常用辅助方法包,其他项目引用该包即可。