大家好,和新我是标准煎鱼。
前面给大家分享了 Go1.21 正式不支持 macOS 10.13 和 10.14 的库包支持。吓得我赶紧把我的速览数 2017 款的老爷机从 10.14 升成 13.4。感觉 mbp 已经变成了暖宝宝。新内😅
今天给大家分享的置函是 Go 1.21 中的两个双新增项,分别是新的 3 个内置方法和新的标准库包。
本次新版本新增的内置函数分别是:clear、min、max,面向不同的场景,函数名和函数作用一致,不得不说论命名的艺术。
我们一个个来展开介绍。
这个 clear 内置函数的加入,真的是等的够久了。在 2022 年的《Go 大佬良心发现,愿意给 map 加清除了?》的文章中,我们有介绍过。
简单来讲,有如下两个问题:
扯到今年吵来吵去,扩大了原有的范围。
最终 Go1.21 新加入的内置函数 clear 接受 map、slice、指向数组的指针或类型参数类型的参数。
函数签名如下:
func clear[T ~[]Type | ~map[Type]Type1](t T)
分别有如下的作用:
map 演示代码如下:
func main() { m := map[string]string{ "脑子进": "煎鱼了", "煎鱼": "进脑子了"} fmt.Printf("m1: %v, len: %d\n", m, len(m)) clear(m) fmt.Printf("m2: %v, len: %d\n", m, len(m))}
输出结果:
m1: map[煎鱼:进脑子了 脑子进:煎鱼了], len: 2m2: map[], len: 0
slice 演示代码如下:
func main() { s := make([]string, 3) s[0] = "吃" s[1] = "煎" s[2] = "鱼" fmt.Printf("s1: %v, len: %d, cap:%d\n", s, len(s), cap(s)) clear(s) fmt.Printf("s2: %v, len: %d, cap:%d\n", s, len(s), cap(s))}
输出结果:
s1: [吃 煎 鱼], len: 3, cap:3s2: [ ], len: 3, cap:3
这两个函数的诞生主要是 @Ian Lance Taylor 发现 min、max 函数。作用是求最小值和最大值。虽然在功能上很微小。但是在代码中却被广泛使用了,认为值得引入标准库中。
随后被 @Robert Griesemer 往内置函数引导,基于 append 和 copy 内置函数的先例,就获得许多人的点赞认可该观点,就正式加入内置函数了。
官方给出的演示代码如下:
var x, y intm := min(x) // m == xm := min(x, y) // m 是 x 和 y 中较小的那个m := max(x, y, 10) // m 是 x 和 y 中较大的一个,但至少是10c := max(1, 2.0, 10) // c == 10.0(浮点类型)f := max(0, float32(x)) // f 的类型是 float32var s []string_ = min(s...) // 无效:不允许使用 slice 参数t := max("", "foo", "bar") // t == "foo" (string 类型)
对于一些特殊值和清空,例如:浮点参数、负零、NaN和无穷大。min、max 函数结果适用以下规则:
x y min(x, y) max(x, y) -0.0 0.0 -0.0 0.0 -Inf y -Inf y +Inf y y +Inf NaN y NaN NaN
本次在标准库中新增的包是 cmp(全称应该是 compare),主要是提供比较、对比等功能。
这块比较简单,直接上源码就懂了:
package cmptype Ordered interface { ~int | ~int8 | ~int16 | ~int32 | ~int64 | ~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr | ~float32 | ~float64 | ~string}func Less[T Ordered](x, y T) bool { return (isNaN(x) && !isNaN(y)) || x < y}func Compare[T Ordered](x, y T) int { xNaN := isNaN(x) yNaN := isNaN(y) if xNaN && yNaN { return 0 } if xNaN || x < y { return -1 } if yNaN || x > y { return +1 } return 0}func isNaN[T Ordered](x T) bool { return x != x}
如果 x 小于 y,则返回 -1
如果 x 等于 y,则返回 0
如果 x 大于 y,则返回 +1
前面提到的 min、max 内置函数,本来也是要放在 cmp 包里的,不过非常荣幸的被 “提拔” 了。仅留下这几个方法。
今天给大家分享了 Go1.21 的一些新内置函数 clear、min、max 和新标准库包 cmp。虽然看起来都是辅助类工具,但他们的加入也是挺费劲的,花了不少时间和讨论。
以后写业务代码和八股文时,可以适当使用这些函数。又能够简化部分代码和逻辑了。
责任编辑:武晓燕 来源: 脑子进煎鱼了 内置函数clear(责任编辑:娱乐)
富瀚微(300613.SZ)公布消息:就收购眸芯科技32.43%股权已完成工商变更登记
元数据和配置驱动的Python框架如何使用Spark处理大数据
四川宜宾:打通农民工服务“最后一米” 全面推动地方产业发展提速增效
SpringCloud Gateway 路由如何定位从底层源码分析
非对称恐怖PvP游戏《盗日求生》Steam页面上线 2023年发售
分期乐提前还款利息的计算方式是怎样的 分期乐分36期可以提前还款吗?