Go 1.21新增的 maps 包详解

这篇具有很好参考价值的文章主要介绍了Go 1.21新增的 maps 包详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

maps 包提供了几个非常有用的用于操作 map 类型(任何类型的 map)的函数,本文接下来详细介绍下这几个函数。

maps.Clone

定义如下:

func Clone[M ~map[K]V, K comparable, V any](m M) M

返回 m 的一个副本,因为新的键和值是使用赋值方式复制的,所以这是一个浅克隆。简单示例如下:

package main

import (
	"fmt"
	"maps"
)

func main() {
	m := map[string]string{"foo": "bar"}
	m1 := maps.Clone(m)
	fmt.Println(m1) // map[foo:bar]
}

maps.Copy

定义如下:

func Copy[M1 ~map[K]V, M2 ~map[K]V, K comparable, V any](dst M1, src M2)

复制 src 中的所有键值对并添加到 dst 中。当 src 中的键已经在 dst 中存在时,dst 中的值将被 src 中被该键对应的值覆盖。简单示例如下:

package main

import (
	"fmt"
	"maps"
)

func main() {
	m := map[string]string{"foo": "bar", "foo2": "bar2"}
	m1 := map[string]string{"foo": "bar2", "foo3": "bar3"}
	maps.Copy(m1, m)
	fmt.Println(m1) // map[foo:bar foo2:bar2 foo3:bar3]
}

maps.DeleteFunc

定义如下:

func DeleteFunc[M ~map[K]V, K comparable, V any](m M, del func(K, V) bool)

从 m 中删除经 del 函数计算后返回 true 的所有键值对。简单示例如下:

package main

import (
	"fmt"
	"maps"
)

func main() {
	m := map[string]int{
		"one":   1,
		"two":   2,
		"three": 3,
		"four":  4,
	}
	maps.DeleteFunc(m, func(k string, v int) bool {
		return v%2 != 0 
	})
	fmt.Println(m)
}

删除所有值为奇数类型的键值对。

maps.Equal

定义如下:

func Equal[M1, M2 ~map[K]V, K, V comparable](m1 M1, m2 M2) bool

判断两个 map 是否包含相同的键值对。简单示例如下:

package main

import (
	"fmt"
	"maps"
)

func main() {
	m := map[string]string{"foo": "bar", "foo2": "bar2"}
	m1 := map[string]string{"foo": "bar2", "foo3": "bar3"}
	m2 := map[string]string{"foo": "bar", "foo2": "bar2"}
	b := maps.Equal(m, m1)
	fmt.Println(b) // false
	b = maps.Equal(m, m2)
	fmt.Println(b) // true
}

maps.EqualFunc

定义如下:

func EqualFunc[M1 ~map[K]V1, M2 ~map[K]V2, K comparable, V1, V2 any](m1 M1, m2 M2, eq func(V1, V2) bool) bool

类似于Equal函数,但使用自定义的 eq 函数进行比较。

package main

import (
	"fmt"
	"maps"
	"strings"
)

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) // true
}

将值转换为小写的字符串后进行比较。文章来源地址https://www.toymoban.com/news/detail-674386.html

到了这里,关于Go 1.21新增的 maps 包详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • slices in Go 1.21

    Go 1.21中新增的 slices 包中提供了很多与切片相关的函数,适用于任意类型的切片。 本文内容来自官方文档 函数签名如下: BinarySearch 在已排序的切片中搜索 target 并返回找到 target 的位置,或者 target 在排序顺序中出现的位置;它还返回一个布尔值,表示是否确实在切片中找到

    2024年02月08日
    浏览(31)
  • 【Golang】Golang进阶系列教程--Go 语言 map 如何顺序读取?

    Go 语言中的 map 是一种非常强大的数据结构,它允许我们快速地存储和检索键值对。 然而,当我们遍历 map 时,会有一个有趣的现象,那就是输出的键值对顺序是不确定的。 先看一段代码示例: 当我们多执行几次这段代码时,就会发现,输出的顺序是不同的。 首先,Go 语言

    2024年02月14日
    浏览(47)
  • 使用go mod tidy命令出现go.mod file indicates go 1.21, but maximum supported version is 1.19,如何解决

    使用git拉取代码Golang代码到本地后,利用VS Code打开项目后,看到go.mod报红,现象如下图所示:` 这个问题是当前使用的go版本与git clone拉取下来的项目的go.mod所用的go版本不一致导致的: 在项目中打开一个terminal,查看当前安装的go版本是否与go.mod的第二行的声明一致:如下图

    2024年02月06日
    浏览(34)
  • 力扣日记1.21-【回溯算法篇】77. 组合

    日期:2023.1.21 参考:代码随想录、力扣 终于结束二叉树了!听说回溯篇也是个大头,不知道这一篇得持续多久了…… 题目描述 难度:中等 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n = 4, k = 2 输出:

    2024年01月22日
    浏览(34)
  • 【详细介绍分析golang中map的相关知识】

    Golang中的map是一种非常强大和灵活的数据结构,它可以用来存储键值对。在本文中,我们将深入探讨Golang中map的相关知识,包括其定义、初始化、操作以及一些常见的应用场景。 在Golang中,map是一种 引用类型 ,可以使用内置的make函数来创建一个map。map的定义形式为: var

    2024年02月17日
    浏览(35)
  • Golang 中的 map 详解

    1、map 的定义   在计算机科学里,被称为相关数组、map、符号表或者字典,是由一组 key, value 对组成的抽象数据结构,并且同一个 key 只会出现一次。   两个关键点:map 是由 key-value 对组成的;key 只会出现一次。   map 的设计也被称为 “The dictionary problem(字典问题)

    2024年02月14日
    浏览(39)
  • 一、Go基础知识21、GOPROXY设置镜像、go编码规范

    在设置 Go 语言的代理时,可以使用 GOPROXY 环境变量来指定代理服务器的地址。 Go 官方提供的中国国内镜像: https://goproxy.cn。 以下是如何设置 Goproxy 中国国内镜像的步骤: 在终端或命令提示符中执行以下命令: 如果你使用的是 Windows 平台的命令提示符,可以使用以下命令:

    2024年01月17日
    浏览(41)
  • go 语言中 map 的相关知识

    map中的key可以是任何的类型,只要它的值能比较是否相等,Go的语言规范已精确定义,Key的类型可以是: 布尔值 数字 字符串 指针 通道 接口类型 结构体 只包含上述类型的数组 但不能是: slice map function Key类型只要能支持 和!=操作符,即可以做为Key,当两个值 时,则认为是

    2024年02月01日
    浏览(34)
  • ES6基础知识五:你是怎么理解ES6新增Set、Map两种数据结构的?

    如果要用一句来描述,我们可以说 Set是一种叫做集合的数据结构,Map是一种叫做字典的数据结构 什么是集合?什么又是字典? 集合 是由一堆无序的、相关联的,且不重复的内存结构【数学中称为元素】组成的组合 字典 是一些元素的集合。每个元素有一个称作key 的域,不同

    2024年02月16日
    浏览(28)
  • 100天精通Golang(基础入门篇)——第12天:深入解析Go语言中的集合(Map)及常用函数应用

    🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包