Go 1.21中引入的新包maps和cmp功能作用详解

 更新时间:2023年11月20日 11:09:41   作者:技术的游戏  
这篇文章主要为大家介绍了Go 1.21中引入的新包maps和cmp功能作用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Go 1.21的发布

随着Go 1.21的发布,将有两个令人兴奋的包被引入到核心库中,这两个包专注于操作maps和提供比较功能。让我们仔细看看这些包:

1. maps 包

maps包为处理maps提供实用工具,使克隆、复制、删除和比较map条目变得更加简单和高效。

函数

  • • Clone: 克隆一个map。

 m := map[string]int{"one": 1, "two": 2}
 cloned := maps.Clone(m)
 fmt.Println(cloned) // Output: map[one:1 two:2]
  • • Copy: 将键/值对从一个map复制到另一个map。

 dst := map[string]int{"one": 1}
 src := map[string]int{"two": 2}
 maps.Copy(dst, src)
 // dst is now {"one": 1, "two": 2}
 fmt.Printf("%#v\n", dst)
  • • DeleteFunc: 根据给定的函数从map中删除键/值对。

 m := map[string]int{"one": 1, "two": 2}
 maps.DeleteFunc(m, func(k string, v int) bool { return v == 2 })
 fmt.Println(m) // Output: map[one:1]
  • • Equal 和 EqualFunc: 比较两个map以检查它们是否相等。

 m1 := map[string]int{"one": 1, "two": 2}
 m2 := map[string]int{"one": 1, "two": 2}
 equal := maps.Equal(m1, m2) // true
 fmt.Println(equal)

2. cmp 包

cmp 包定义了用于比较有序类型的函数和类型,包括整数、浮点数和字符串。该包提供了一种一致的方式来比较值,包括浮点类型的 NaN 值。

函数

  • • Compare: 比较两个有序值并返回 -1、0 或 +1。

 result := cmp.Compare(5, 10) // -1
 fmt.Println(result)
 result = cmp.Compare(10, 5) // 1
 fmt.Println(result)
 result = cmp.Compare(5, 5) // 0
 fmt.Println(result)
  • • Less: 判断一个值是否小于另一个值。

 isLess := cmp.Less(5, 10) // true
 fmt.Println(isLess)
 isLess = cmp.Less(10, 5) // false
 fmt.Println(isLess)
 isLess = cmp.Less(10, 10) // false
 fmt.Println(isLess)

类型

  • • Ordered: 一个约束,允许任何有序类型,包括支持比较运算符如<<=>=>的类型。这个约束可以与类型参数一起使用,确保与通用函数或类型一起使用的类型满足所需的约束。

func Min[T cmp.Ordered](a, b T) T {
 if cmp.Less(a, b) {
  return a
 }
 return b
}
func main() {
 minInt := Min(3, 5)        // minInt is 3
 minString := Min("a", "b") // minString is "a"
 fmt.Println(minInt, minString)
}

结论

在 Go 中引入 maps 和 cmp 包代表了增强该语言核心功能的重要一步。有了这些添加,开发者现在可以轻松地操作和比较映射和有序类型,进一步简化他们的代码。通过将常见操作抽象到这些核心包中,Go 继续追求开发体验中的效率、清晰性和稳健性。

以上就是Go 1.21中引入的新包maps和cmp功能作用详解的详细内容,更多关于Go1.21 maps cmp包的资料请关注脚本之家其它相关文章!

相关文章

  • Go语言使用make进行内存分配的代码示例

    Go语言使用make进行内存分配的代码示例

    在Go语言里,内存分配是程序开发中的关键环节,make是Go语言内置的一个重要函数,专门用于为切片(slice)、映射(map)和通道(channel)这三种引用类型分配内存并初始化,本文将深入剖析 make 函数的使用,结合代码示例与实际项目场景,帮助开发者更好地掌握这一特性
    2025-06-06
  • Golang利用WebSocket实现实时推送功能

    Golang利用WebSocket实现实时推送功能

    WebSocket 是一个实时双向通信的协议,底层用 TCP,借用 HTTP 建立连接,专门用来做实时功能,下面小编就和大家详细介绍一下Golang如何利用WebSocket实现实时推送功能吧
    2026-03-03
  • 一文详解Python如何处理无法解码文件名

    一文详解Python如何处理无法解码文件名

    在跨平台文件处理,国际化应用或系统管理工具开发中,文件名无法正确解码是文件名无法正确解码,本文将深入探讨Python中处理无法解码文件名的方法,大家可以根据需要进行选择
    2025-09-09
  • 浅析Golang中如何实现一个强大的重试机制

    浅析Golang中如何实现一个强大的重试机制

    在 Go 语言中,实现一个强大的重试机制可以通过多种方式来完成,这篇文章为大家介绍了一个常见的实现方法,需要的小伙伴可以参考一下
    2025-03-03
  • Go语言中实现Unix风格的进程管道方法实例

    Go语言中实现Unix风格的进程管道方法实例

    这篇文章主要为大家介绍了Go语言中实现Unix风格的进程管道方法实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Go语言学习笔记之反射用法详解

    Go语言学习笔记之反射用法详解

    这篇文章主要介绍了Go语言学习笔记之反射用法,详细分析了Go语言中反射的概念、使用方法与相关注意事项,需要的朋友可以参考下
    2017-05-05
  • Go语言实现优雅关机和重启的示例详解

    Go语言实现优雅关机和重启的示例详解

    优雅的关机是指在关闭服务之前,先让服务处理完当前正在处理的请求,然后再关闭服务,本文主要为大家详细介绍了如何使用Go语言实现优雅关机和重启,感兴趣的小伙伴可以参考一下
    2025-04-04
  • golang如何解决go get命令无响应问题

    golang如何解决go get命令无响应问题

    文章介绍了在Go语言中处理由于官方库被封禁导致依赖下载失败的方法,包括设置代理和直接克隆依赖包到GOPATH/src下
    2024-12-12
  • golang小游戏开发实战之飞翔的小鸟

    golang小游戏开发实战之飞翔的小鸟

    这篇文章主要给大家介绍了关于golang小游戏开发实战之飞翔的小鸟的相关资料,,本文可以带你你从零开始,一步一步的开发出这款小游戏,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • Golang关键字select的常用用法总结

    Golang关键字select的常用用法总结

    这篇文章主要为大家详细介绍了golang中select关键字的常用用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10

最新评论