Go 竟然没有标准库的 min max

340 天前
 chesha1

最近开始学 go ,就用 go 刷 leetcode ,竟然没有 min max 函数,真的非常蛋疼
连标准库功能一点都不丰富的 C++都有内置的 min 和 max 呢

虽然 go 现在也有泛型了,但是直接用泛型写一个 min max 也是不行的
没有直接支持 > <
比如下面这个就是不合法的

func max[T comparable](a, b T) T {
    if a > b {
        return a
    }
    return b
}

还得再引入一个包

import (
	"golang.org/x/exp/constraints"
)

func max[T constraints.Ordered](a, b T) T {
	if a > b {
		return a
	}
	return b
}

所以这么设计的意义在哪里,很怪很怪,还有什么流行的语言没有内置 min 和 max 吗?
C 也没有 max 和 min ,但是人家好歹可以用宏一行写一个,go 就不行

6087 次点击
所在节点    Go 编程语言
48 条回复
Reficul
340 天前
只有可比较的类型才能计算 min 和 max 有什么问题么? 没看出来喷点在哪。
SingeeKing
340 天前
你学的知识有点旧🌚半年前的 Go 1.21 已经有了内置的 min max
iseki
340 天前
Go 的 comparable 其实是可做相等比较的意思…和比大小不沾边。
faceair
340 天前
comparable 只是表示可比较,不一定表示可以比较大小

func equal[T comparable](a, b T) bool {
return a != b
}

1.21 里的内置函数 min max 引用的是 cmp.Ordered 标准库的泛型约束,不用引用 exp
zhs227
340 天前
go.1.21 开始已经有了。
bazingaterry
340 天前
go 不适合刷 leetcode
horsley
340 天前
一点小提示,你在 leetcode 用 go ,直接用 min max ,上下文里面有
函数签名大抵是
```
func max(a, b int) int
func min(a, b int) int
```
Binwalker
340 天前
大道至简啊
taxue67marx
340 天前
学习新的编程语言时,一定要保持开放的思维,每种编程语言的设计理念和实现方式都有其独特的地方
xingjue
340 天前
你学的知识有点旧🌚半年前的 Go 1.21 已经有了内置的 min max
zydxn
340 天前
楼上说了 Go 1.21 已经有了,而且补充一点,leetcode 也支持了 1.21 ,并不用自己每次写一个 func min 或者 max
Mirage09
340 天前
go 确实不适合用来刷 leetcode
ufan0
340 天前
借楼问下,使用 Go 做商业开发的朋友们,
会像 Java 一样,多年保持 1.8 甚至 1.7 吗?
lizhisty
340 天前
@ufan0 不可能的都是新版本的往前一个版本
lizhisty
340 天前
别学了,自己写个语言
s1mpleOf
340 天前
所以 math 庫是幹嘛的呢?:)
echo1937
340 天前
看来应该学习/使用 1.21+
drvDPqg5nO7kZWhv
340 天前
剽悍的语言不需要解释,我们只需要 == 和 !=,别问为什么,因为再多就不是简洁
ixiaohei
340 天前
@ufan0 之前项目都是使用有维护支持的版本,经常在紧跟倒数第二个版本; golang 只会维护当前两个版本;后面 golang1.18 加了范型;停在 1.17 很久之后又开始跟了最新的版本了(可能是范型加的东西太多,当时主导升级的人没学会,不会用;另外 golang 支持范型的版本运行效率有些下降;当时不想因为用不上范型反而要去忍受性下降,所以没升)
Trim21
340 天前
没泛型的时候 max min 需要魔法,有了泛型才
能有不需要编辑器开后门的 max min 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1002121

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX