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

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

来源: 责编: 时间:2023-09-28 10:08:05 201观看
导读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 也可能是任意类型。0XX28资讯网——每日最新资讯28at.com

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

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

02 、标准库 slices

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

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

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

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

函数 BinarySearch 示例代码:0XX28资讯网——每日最新资讯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)}

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

Vera: 2 trueBill: 1 false

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

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

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

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

函数 BinarySearchFunc 示例代码:0XX28资讯网——每日最新资讯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)}

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

Bob: 1 true

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

03 、标准库 maps

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

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

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

函数 Equal 示例代码:0XX28资讯网——每日最新资讯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))}

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

truefalse

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

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

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

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

函数 EqualFunc 示例代码:0XX28资讯网——每日最新资讯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)}

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

true

04、总结

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

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

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

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

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

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

标签:
  • 热门焦点
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 摸鱼心法第一章——和配置文件说拜拜

    摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • .NET 程序的 GDI 句柄泄露的再反思

    .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 自律,给不了Keep自由!

    自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 网传小米汽车开始筛选交付中心 建筑面积不低于3000平方米

    网传小米汽车开始筛选交付中心 建筑面积不低于3000平方米

    7月7日消息,近日有微博网友@长三角行健者爆料称,据经销商集团反馈,小米汽车目前已经开始了交付中心的筛选工作,要求候选场地至少有120个车位,建筑不能低
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
  • 英特尔Xe-HP项目终止,将专注Xe-HPC/HPG系列显卡

    英特尔Xe-HP项目终止,将专注Xe-HPC/HPG系列显卡

    据10 月 31 日消息报道,英特尔高级副总裁兼加速计算系统和图形事业部总经理 表示,Xe-HP“ Arctic Sound” 系列服务器 GPU 已经应用于 oneAPI devcloud 云服
  • 英特尔Xe HPG游戏显卡:拥有512EU,单风扇版本

    英特尔Xe HPG游戏显卡:拥有512EU,单风扇版本

    据10 月 30 日外媒 TheVerge 消息报道,英特尔 Xe HPG Arc Alchemist 的正面实被曝光,不仅拥有 512 EU 版显卡,还拥有 128EU 的单风扇版本。另外,这款显卡 PCB
Top
Baidu
map