Go 1.21+推荐使用cmp.Max和cmp.Min(支持任意可比较类型且类型必须相同),math.Max/Min仅限float64;切片需手动遍历或泛型函数实现;旧版本可用自定义函数。
Go语言标准库中没有直接提供适用于所有数字类型的math.Max和math.Min函数,这是因为Go在1.21版本之前不支持泛型重载,而math包中的Max和Min仅支持float64类型。从Go 1.21开始,标准库新增了max和min泛型函数(位于golang.org/x/exp/constraints已废弃,实际已移入cmp包),但更常用、更推荐的方式是使用Go 1.21+内置的cmp.Max和cmp.Min,或自己写简洁的比较逻辑。
Go 1.21起,标准库新增cmp包(cmp是compare缩写),其中cmp.Max和cmp.Min支持任意可比较类型(如int、int64、float64、string等),只要两个值类型相同且可比较即可。
import "cmp"
a, b := 15, 8 maxVal := cmp.Max(a, b) // int 类型,返回 15 minVal := cmp.Min(a, b) // 返回 8 x, y := 3.14, 2.71 maxF := cmp.Max(x, y) // float64,返回 3.14
cmp.Max/Min不支持混合类型(如int和int64不能混用),编译会报错math.Max和math.Min是传统方式,但只接受float64参数,传入整数需显式转换,且对NaN有特殊行为(如math.Max(1, NaN)返回NaN)。
import "math"
float64:
i, j := 10, -5 maxF := math.Max(float64(i), float64(j)) // 得 10.0
int切片求最大值——必须手动遍历或用cmp辅助标准库无MaxOfSlice之类函数,需自行遍历。配合cmp可写出类型安全、简洁的通用函数:
func maxIntSlice(s []int) (int, bool) { if len(s) == 0 { return 0, false } m := s[0] for _, v := range s[1:] { m = cmp.Max(m, v) } return m, true }
func MaxSlice[T constraints.Ordered](s []T) (T, bool) {
if len(s) == 0 { var zero T; return zero, false }
m := s[0]
for _, v := range s[1:] {
m = cmp.Max(m, v)
}
return m, true
}
(需import "constraints",但注意constraints已在Go 1.21标记为deprecated;实际可改用comparable + 显式比较,或直接依赖cmp)若项目仍用Go cmp,可用内联三元风格(Go无?:,但可用if表达式封装):
max := func(a, b int) int { if a > b { return a }; return b }
min := func(a, b int) int { if a < b { return a }; return b }
x := max(42, 19) // 42
基本上就这些。优先用cmp.Max/Min(Go 1.21+),兼顾类型安全与简洁;老版本可用自定义函数或math配合类型转换;切片操作记得判空。不复杂但容易忽略版本和类型匹配细节。
# go
# golang
# go语言
# ai
# 标准库
# red
# String
# if
# 封装
# math
# 无类型
# int
# 值类型
# 泛型
相关文章:
非常酷的网站设计制作软件,酷培ai教育官方网站?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
香港服务器部署网站为何提示未备案?
如何快速生成可下载的建站源码工具?
如何基于PHP生成高效IDC网络公司建站源码?
做企业网站制作流程,企业网站制作基本流程有哪些?
清除minerd进程的简单方法
阿里云网站制作公司,阿里云快速搭建网站好用吗?
建站主机与虚拟主机有何区别?如何选择最优方案?
建站之星收费标准详解:套餐费用及年费价格表一览
如何挑选高效建站主机与优质域名?
如何高效利用200m空间完成建站?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
建站之星Pro快速搭建教程:模板选择与功能配置指南
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
一键网站制作软件,义乌购一件代发流程?
C++如何使用std::optional?(处理可选值)
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
音乐网站服务器如何优化API响应速度?
如何批量查询域名的建站时间记录?
招贴海报怎么做,什么是海报招贴?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
如何在Golang中指定模块版本_使用go.mod控制版本号
建站主机选虚拟主机还是云服务器更好?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
如何安全更换建站之星模板并保留数据?
如何在建站之星绑定自定义域名?
建站之星好吗?新手能否轻松上手建站?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
智能起名网站制作软件有哪些,制作logo的软件?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
如何在万网开始建站?分步指南解析
如何在云虚拟主机上快速搭建个人网站?
网站制作说明怎么写,简述网页设计的流程并说明原因?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
建站主机服务器选购指南:轻量应用与VPS配置解析
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
小程序网站制作需要准备什么资料,如何制作小程序?
建站为何优先选择香港服务器?
如何快速登录WAP自助建站平台?
建站之星导航菜单设置与功能模块配置全攻略
C#如何在一个XML文件中查找并替换文本内容
如何选择PHP开源工具快速搭建网站?
Python文件管理规范_工程实践说明【指导】
黑客如何利用漏洞与弱口令入侵网站服务器?
如何高效完成独享虚拟主机建站?
如何用免费手机建站系统零基础打造专业网站?
建站之星下载版如何获取与安装?
如何高效生成建站之星成品网站源码?
建站上传速度慢?如何优化加速网站加载效率?
*请认真填写需求信息,我们会在24小时内与您取得联系。