Go 1.21 将于 2023 年 8 月发布。该版本主要关注映射maps、切片slices和通道channels的辅助函数。
让我们看看 Go 1.21 新增了什么:
Min, Max, 和Clear函数
Go 为切片slices、映射maps和通道channels添加了一些默认函数。您可以如规范所示使用这些函数。
var x, y int m := min(x) // m == x m := min(x, y) // m is the smaller of x and y m := max(x, y, 10) // m 是 x 和 y 的较大值,但至少是 10 c := max(1, 2.0, 10) // c == 10.0 (浮点类型) f := max(0, float32(x)) // f 的类型是 float32 var s []string _ = min(s...) // // 无效:不允许使用它作为slice参数 t := max("", "foo", "bar") // t == "foo" (string kind)
|
标准日志包
Go 1.21 提供了结构化日志(slog)。您可以包含一条消息、设置日志严重性并添加键值对。此版本还包括用于测试目的的slogtest包。
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil )) logger.Info( "hello" , "count" , 3 )
|
Map
借助泛型函数的强大功能,Go 1.21 提供了几个非常有用的新函数。
func Clone (m M) M func Copy (dst M1, src M2) func DeleteFunc (m M, del func (K, V) bool ) func Equal (m1 M1, m2 M2) bool func EqualFunc (m1 M1, m2 M2, eq func (V1, V2) bool ) bool
|
切片函数
与Map函数一样,我们可以在切片上使用排序、包含、比较、反向、二分查找和索引函数。您可以在此页面上找到完整的功能列表。以下是函数的一些示例用法及其结果(作为注释)。
names := []string{"Vera", "Bob", "Alice"} slices.IsSorted(names) // false slices.Sort(names) // [Alice Bob Vera] slices.Compare(names, []string{"Alice", "Bob", "Vera"}) // 0 slices.BinarySearch(names, "Bob") // 1 true slices.Reverse(names)// [Vera Bob Alice] slices.Insert(names, 1, "Bob") // [Vera Bob Bob Alice] slices.Compact(names)// [Vera Bob Alice]
|
比较和减函数
cmp 包中定义的有序类型比较函数。它适用于 int(8,64)、uint(8,64,ptr)、float(32,64) 和字符串。
func Compare(x, y T) int func Less(x, y T) bool
|
配置文件引导优化 (PGO)
该功能在 Go 1.20 中引入,并在 Go 1.21 中成为默认功能。通过此功能,Go 启用了AutoFDO功能。根据应用程序行为,它可提供 2-7% 的性能提升。您可以查看功能页面以了解实施细节。