Go 1.21中新增加了三个内建的函数,相比以前的len、cap、delete、append、close、panic等函数,又有了新的变化,让我们一起来看看吧。
clear
clear一直是大家想要的一个函数,新增的这个函数,用来操作map和slice对象:
1
funcclear[T ~[]Type | ~map[Type]Type1](t T)
对于map对象: clear函数清空map对象的所有的元素
对于slice对象: clear函数将所有的元素设置为元素类型的零值,长度不变,容量不变
写一个程序测试下,的的确确如上所述:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
functestClear() { m := map[float64]bool{100: true, 1000: true, math.NaN(): true, math.NaN(): true} delete(m, math.NaN()) fmt.Printf("before clear, m len: %d\n", len(m)) clear(m) fmt.Printf("after clear, m len: %d\n", len(m))
s := make([]float64, 0, 1024*1024) for i := 0; i < 10; i++ { s = append(s, float64(i)) } fmt.Printf("before clear, s len: %d, s cap: %d\n", len(s), cap(s)) clear(s) fmt.Printf("after clear, s len: %d, s cap: %d\n", len(s), cap(s)) fmt.Println(s) }
运行gotip run main.go, 输出结果
1 2 3 4 5
before clear, m len: 4 after clear, m len: 0 before clear, s len: 10, s cap: 1048576 after clear, s len: 10, s cap: 1048576 [0 0 0 0 0 0 0 0 0 0]
var x, y int m := min(x) // m == x, 单个参数都可以! m := min(x, y) // m 是 x 和 y 中最小的那个 m := max(x, y, 10) // m 是 x, y, 10 中最大的那个, 也就是最少是 10 c := max(1, 2.0, 10) // c == 10.0 (浮点数) f := max(0, float32(x)) // float32类型 var s []string _ = min(s...) // 无效: 不支持 slice 参数 t := max("", "foo", "bar") // t == "foo" (支持string类型)
对浮点数的极限值,有如下规则:
1 2 3 4 5 6
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 // 只要一个参数是NaN,这两个函数的返回就过就是NaN