Go 竟然没有标准库的 min max

2023-12-21 00:59:27 +08:00
chesha1  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 就不行

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

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

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