当前位置:首页 > 科技  > 软件

Go 1.21.0 新增标准库 Slices 和 Mps 详解

来源: 责编: 时间:2023-09-28 10:08:05 410观看
导读01 、介绍在 Go 语言项目开发中,我们经常会使用 slice 和 map 数据类型,因为 Go 1.18.0 开始支持泛型,所以 slice 的元素可能是任意类型,map 的 key 和 value 也可能是任意类型。Go 1.21.0 新增操作 slice 和 map 数据类

01 、介绍

在 Go 语言项目开发中,我们经常会使用 slice 和 map 数据类型,因为 Go 1.18.0 开始支持泛型,所以 slice 的元素可能是任意类型,map 的 key 和 value 也可能是任意类型。cME28资讯网——每日最新资讯28at.com

Go 1.21.0 新增操作 slice 和 map 数据类型的标准库 slices 和 maps,提供了操作 slice 和 map 的泛型函数。cME28资讯网——每日最新资讯28at.com

本文我们介绍标准库 slices 和 maps 的使用方式。cME28资讯网——每日最新资讯28at.com

02 、标准库 slices

标准库 slices 提供了许多操作任意类型元素 slice 的函数,可以方便我们实现业务需求。cME28资讯网——每日最新资讯28at.com

建议感兴趣的读者朋友们阅读手册了解关于标准库 slices[1] 的所有函数的功能。cME28资讯网——每日最新资讯28at.com

限于篇幅,我们介绍关于查找的函数的使用方式。cME28资讯网——每日最新资讯28at.com

查找功能的函数 BinarySearch 和 BinarySearchFunc。cME28资讯网——每日最新资讯28at.com

函数 BinarySearch 示例代码:cME28资讯网——每日最新资讯28at.com

func main() { names := []string{"Alice", "Bob", "Vera"} n, found := slices.BinarySearch(names, "Vera") fmt.Println("Vera:", n, found) n, found = slices.BinarySearch(names, "Bill") fmt.Println("Bill:", n, found)}

输出结果:cME28资讯网——每日最新资讯28at.com

Vera: 2 trueBill: 1 false

阅读上面这段代码,我们定义一个字符串元素类型的切片 names,使用标准库 slices 提供的二分查找函数 BinarySearch 查找 names 切片中的元素 Vera。cME28资讯网——每日最新资讯28at.com

该函数返回被查找元素在切片中的索引位置或被查找元素在切片中应该出现的位置,和被查找元素是否真实存在于切片中的一个布尔值。cME28资讯网——每日最新资讯28at.com

什么是被查找元素在切片中应该出现的位置?示例代码中,查找 Bill,切片中没有该元素,按照切片中递增排序,Bill 应该在 Alice 后面,即索引为 1。cME28资讯网——每日最新资讯28at.com

需要注意的是,使用函数 BinarySearch 查找元素的切片,切片中的元素必须是按照递增顺序排序。cME28资讯网——每日最新资讯28at.com

函数 BinarySearchFunc 示例代码:cME28资讯网——每日最新资讯28at.com

func main() { type Person struct {  Name string  Age  int } people := []Person{  {"Alice", 55},  {"Bob", 24},  {"Gopher", 13}, } n, found := slices.BinarySearchFunc(people, Person{"Bob", 0}, func(a, b Person) int {  return cmp.Compare(a.Name, b.Name) }) fmt.Println("Bob:", n, found)}

输出结果:cME28资讯网——每日最新资讯28at.com

Bob: 1 true

阅读上面这段代码,函数 BinarySearchFunc 与 函数 BinarySearch 的功能类似,区别是可以使用自定义比较函数。cME28资讯网——每日最新资讯28at.com

03 、标准库 maps

标准库 maps 提供了许多操作任意类型 key 和 value 的 map 的函数,可以方便我们实现业务需求。cME28资讯网——每日最新资讯28at.com

建议感兴趣的读者朋友们阅读手册了解关于标准库 maps[2] 的所有函数的功能。cME28资讯网——每日最新资讯28at.com

限于篇幅,我们介绍关于比较两个 map 中的 key 和 value 是否相同的函数的使用方式。cME28资讯网——每日最新资讯28at.com

函数 Equal 示例代码:cME28资讯网——每日最新资讯28at.com

func main() { m1 := map[string]int{"lucy": 17, "lily": 18} m2 := map[string]int{"lucy": 17, "lily": 18} m3 := map[string]int{"lucy": 18, "lily": 17} fmt.Println(maps.Equal(m1, m2)) fmt.Println(maps.Equal(m1, m3))}

输出结果:cME28资讯网——每日最新资讯28at.com

truefalse

阅读上面这段代码,我们定义三个 map 类型的变量,其中 m1 和 m2 的 key 和 value 完全相同,而 m3 的 value 与 m1 和 m2 的 value 不同。cME28资讯网——每日最新资讯28at.com

使用函数 Equal 比较,分别返回 true 和 false。cME28资讯网——每日最新资讯28at.com

需要注意的是 map 的 key 和 value 必须都是可比较的类型。cME28资讯网——每日最新资讯28at.com

函数 EqualFunc 和函数 Equal 的功能类似,区别是使用 eq 比较 value。key 仍然使用比较运算符 == 进行比较。cME28资讯网——每日最新资讯28at.com

函数 EqualFunc 示例代码:cME28资讯网——每日最新资讯28at.com

func main() { m1 := map[int]string{  1:    "one",  10:   "Ten",  1000: "THOUSAND", } m2 := map[int][]byte{  1:    []byte("One"),  10:   []byte("Ten"),  1000: []byte("Thousand"), } eq := maps.EqualFunc(m1, m2, func(v1 string, v2 []byte) bool {  return strings.ToLower(v1) == strings.ToLower(string(v2)) }) fmt.Println(eq)}

输出结果:cME28资讯网——每日最新资讯28at.com

true

04、总结

本文我们简单介绍 Go 1.21.0 新增标准库 slices 和 maps,标准库提供了一些操作 slice 和 map 的函数,限于篇幅,分别介绍 slices 的查找功能的函数,和 maps 的比较相同功能的函数。cME28资讯网——每日最新资讯28at.com

建议读者朋友们,阅读文档,了解标准库提供的所有函数的功能和使用方式。cME28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-11850-0.htmlGo 1.21.0 新增标准库 Slices 和 Mps 详解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 作用域 CSS 回来了,你知道吗?

下一篇: 使用查询分离后从20s优化到500ms

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • 学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 最“俊美”淘宝卖家,靠直播和短视频圈粉,上架秒光,年销3000万

    来源 | 电商在线文|易琬玉编辑|斯问受访店铺:Ringdoll戒之人形图源:微博@御座的黄山、“Ringdoll戒之人形”淘宝店铺有关外貌的评价,黄山已经听累了。生于1985年的他,哪
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页“充值中心”入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事“起猛了,我能看得懂日语了”。“为什么日本人说话我能听懂?”“中文不像中文,日语不像日语,但是我竟然看懂了”…&hell
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
Top