Golang Go语言中竟然没有标准库的 min max
最近开始学 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 就不行
Golang Go语言中竟然没有标准库的 min max
更多关于Golang Go语言中竟然没有标准库的 min max的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
只有可比较的类型才能计算 min 和 max 有什么问题么? 没看出来喷点在哪。
更多关于Golang Go语言中竟然没有标准库的 min max的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你学的知识有点旧🌚半年前的 Go 1.21 已经有了内置的 min max
Go 的 comparable 其实是可做相等比较的意思…和比大小不沾边。
comparable 只是表示可比较,不一定表示可以比较大小
func equal[T comparable](a, b T) bool {
return a != b
}
1.21 里的内置函数 min max 引用的是 cmp.Ordered 标准库的泛型约束,不用引用 exp
go.1.21 开始已经有了。
go 不适合刷 leetcode
大道至简啊
学习新的编程语言时,一定要保持开放的思维,每种编程语言的设计理念和实现方式都有其独特的地方
你学的知识有点旧🌚半年前的 Go 1.21 已经有了内置的 min max
楼上说了 Go 1.21 已经有了,而且补充一点,leetcode 也支持了 1.21 ,并不用自己每次写一个 func min 或者 max
go 确实不适合用来刷 leetcode
借楼问下,使用 Go 做商业开发的朋友们,
会像 Java 一样,多年保持 1.8 甚至 1.7 吗?
不可能的都是新版本的往前一个版本
别学了,自己写个语言
所以 math 庫是幹嘛的呢?:)
看来应该学习/使用 1.21+
剽悍的语言不需要解释,我们只需要 == 和 !=,别问为什么,因为再多就不是简洁
之前项目都是使用有维护支持的版本,经常在紧跟倒数第二个版本; golang 只会维护当前两个版本;后面 golang1.18 加了范型;停在 1.17 很久之后又开始跟了最新的版本了(可能是范型加的东西太多,当时主导升级的人没学会,不会用;另外 golang 支持范型的版本运行效率有些下降;当时不想因为用不上范型反而要去忍受性下降,所以没升)
没泛型的时候 max min 需要魔法,有了泛型才
能有不需要编辑器开后门的 max min 。
我甚至不知道该从什么角度吐槽了
这就是 go ,大道至简。写着写着总会遇到一些蛋疼的问题
用 go 就是这样,你别把它当 python ,当成增强的 c 就能理解了,很操蛋
要考虑所有的工具链是不是适合升级,这个确实卡了很久,我们很多的在用工具链在大概过了 1 年多才适配最新的版本
Go 本来就啥都没有,体验非常蛋疼
go 自带库功能很少, 还是 java 的生态香啊
然而新版本内置的 min max 还是编译器开后门(悲)
都过去这么多年了,对 golang 的认知并没有什么提升呢。
还在用大道至简这种不清不楚的表达
翻译:啥都没有
我待过的每一个用 Go 的团队,都是新版本一出就升级的
这是只能比较 a 和 b, 还有 cdef … 呢
什么时候把 三目运算 加上吧
九转大肠 [/doge]
每次刷 leetcode 的时候都会吐槽 go 居然没有开箱即用的 min, max, abs, hashtable<br>func min(a, b int) int { if b < a { return b }; return a }<br>func max(a, b int) int { if b > a { return b }; return a }<br>func abs(x int) int { if x < 0 { return -x }; return x }<br>
难绷,为啥啊
现在力扣现在的 go 版本有泛型 min max 啊
为了不增加运行时成本吧。如果实现成普通 variadic 函数每次都要构造一个 slice
每种语言都好比一种武动, [太极拳只重其义,不重其招。你忘记所有的招式,就练成太极拳了。]
go 的工具库,集合库凑合第三方吧,没见过这么搓的官方库
知道你想吐槽老版 golang 不支持泛型了
当我们对一个工具了解的少的时候,总喜欢抱怨这个工具缺少什么,为什么不太好用,楼主就是很好的例子。
想必你也是反对 golang 加入泛型的吧,如果对 golang 不满意,一定是使用者的问题对吧
#44
个人感觉没问题,用不适合的工具做事情本来就不是工具的问题。
我这边最近写的一个东西要同时处理多个网络命名空间。
比较好的处理方式是起不同的线程,同时放在不同的命名空间里。
但是 golang 不行,因为 goroutine 的操作,不能让用户控制线程。只能锁住不让 golang 切换线程,修改当前线程所在的命名空间,这样会带来严重的性能问题。
但这不能算是 golang 的问题,goroutine 带来的好处明显大过给这些边缘功能带来的坏处,我也觉得官方库不应该为了适配这种特殊场景增加额外的复杂度。明显就是我不应该用 golang 去做这个功能。
钓鱼呢?
现在 Leetcode Go verison 是 1.21, 已经有 min, max 了
但是像 min,max 这种,就是工具本身的问题,不然官方也不会在后续的版本加入泛型,最搞笑的是之前一堆 go 小子一堆理由分析 go 为啥不应该有泛型,需要泛型就不应该用 go
我记得前段时间还用过 min 和 max ,leetcode 是支持的
在Go语言中,确实没有直接内置在标准库中的 min
和 math.Max
函数来直接获取两个数的最小值和最大值。这种设计选择反映了Go语言的一些核心设计理念,比如简洁性和明确性。不过,这并不意味着我们不能在Go中实现 min
和 max
功能。
实际上,你可以通过编写简单的函数来实现这一功能。以下是一个例子:
package main
import (
"fmt"
)
// Min returns the smaller of x or y.
func Min(x, y int) int {
if x < y {
return x
}
return y
}
// Max returns the larger of x or y.
func Max(x, y int) int {
if x > y {
return x
}
return y
}
func main() {
a, b := 5, 10
fmt.Println("Min:", Min(a, b))
fmt.Println("Max:", Max(a, b))
}
这段代码定义了两个函数 Min
和 Max
,它们分别接受两个 int
类型的参数,并返回两者中的最小值和最大值。你可以在需要的地方重用这些函数。
虽然Go标准库没有提供这些函数,但这种简单的实现方式既清晰又易于理解,同时也保持了代码的灵活性和可读性。在Go语言中,提倡使用明确和简洁的代码来实现功能,而不是依赖大量的内置函数。这种风格有助于开发者写出清晰、易维护的代码。