golang中map是什么

golang中,map是一种特殊的数据结构,是一个key(索引)和value(值)形式的无序的集合,也可以称为关联数组或字典;map是一种能够快速寻找值的理想结构,是能够快速根据给定key,找到对应的value的数据结构。

golang中map是什么

本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

Go语言中 map 是一种特殊的数据结构,一种元素对(pair)的无序集合,pair 对应一个 key(索引)和一个 value(值),所以这个结构也称为关联数组或字典,这是一种能够快速寻找值的理想结构,给定 key,就可以迅速找到对应的 value。

Golang 的 map 的 key 可以是任何可以使用 == 进行比较的 数据类型,比如 int、string、bool 等,value 可以是任意的类型。

map 是一个无序的数据结构,因此同一个 map,每次遍历获取的顺序很可能是不一致的。

立即学习“go语言免费学习笔记(深入)”;

map 概念

map 是引用类型,可以使用如下方式声明:

var mapname map[keytype]valuetype

登录后复制

其中:

mapname 为 map 的变量名。

keytype 为键类型。

valuetype 是键对应的值类型。

提示:[keytype] 和 valuetype 之间允许有空格。

在声明的时候不需要知道 map 的长度,因为 map 是可以动态增长的,未初始化的 map 的值是 nil,使用函数 len() 可以获取 map 中 pair 的数目。

【示例】

package mainimport "fmt"func main() {    var mapLit map[string]int    //var mapCreated map[string]float32    var mapAssigned map[string]int    mapLit = map[string]int{"one": 1, "two": 2}    mapCreated := make(map[string]float32)    mapAssigned = mapLit    mapCreated["key1"] = 4.5    mapCreated["key2"] = 3.14159    mapAssigned["two"] = 3    fmt.Printf("Map literal at "one" is: %d", mapLit["one"])    fmt.Printf("Map created at "key2" is: %f", mapCreated["key2"])    fmt.Printf("Map assigned at "two" is: %d", mapLit["two"])    fmt.Printf("Map literal at "ten" is: %d", mapLit["ten"])}

登录后复制

输出结果:

1.png

示例中 mapLit 演示了使用{key1: value1, key2: value2}的格式来初始化 map ,就像数组和结构体一样。

上面代码中的 mapCreated 的创建方式mapCreated := make(map[string]float)等价于mapCreated := map[string]float{} 。

mapAssigned 是 mapList 的引用,对 mapAssigned 的修改也会影响到 mapLit 的值。

注意:可以使用 make(),但不能使用 new() 来构造 map,如果错误的使用 new() 分配了一个引用对象,会获得一个空引用的指针,相当于声明了一个未初始化的变量并且取了它的地址:

mapCreated := new(map[string]float)

登录后复制

接下来当我们调用mapCreated[“key1”] = 4.5的时候,编译器会报错:

invalid operation: mapCreated["key1"] (index of type *map[string]float).

登录后复制

map 容量

和数组不同,map 可以根据新增的 key-value 动态的伸缩,因此它不存在固定长度或者最大限制,但是也可以选择标明 map 的初始容量 capacity,格式如下:

make(map[keytype]valuetype, cap)

登录后复制

例如:

map2 := make(map[string]float, 100)

登录后复制

当 map 增长到容量上限的时候,如果再增加新的 key-value,map 的大小会自动加 1,所以出于性能的考虑,对于大的 map 或者会快速扩张的 map,即使只是大概知道容量,也最好先标明。

这里有一个 map 的具体例子,即将音阶和对应的音频映射起来:

noteFrequency := map[string]float32 {"C0": 16.35, "D0": 18.35, "E0": 20.60, "F0": 21.83,"G0": 24.50, "A0": 27.50, "B0": 30.87, "A4": 440}

登录后复制

【相关推荐:Go视频教程、编程教学】

以上就是golang中map是什么的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2415077.html

(0)
上一篇 2025年3月3日 00:50:55
下一篇 2025年2月27日 11:59:48

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • golang怎么获取注释内容

    在golang中,可以使用godoc工具来提取注释内容。godoc工具会从Go程序和包文件中提取顶级声明的首行注释以及每个对象的相关注释,并生成相关文档,也可以作为一个提供在线文档浏览的web服务器。 本教程操作环境:windows10系统…

    2025年3月3日
    200
  • go语言多个变量怎么初始化

    多个变量初始化的方法:1、利用var关键字的形式来一次定义并初始化多个变量,语法“var(变量1 = 表达式1 变量2 = 表达式2 变量3 = 表达式3)”;2、使用冒号等于“:=”的形式来一次定义并初始化多个变量,语法“变量1, 变量2…

    2025年3月3日
    200
  • go语言中字符串怎么遍历

    字符串遍历方法:1、使用“for range”语句遍历,语法“for key, value := range str {…}”;2、使用strings包的Map()函数来遍历,语法“trings.Map(func(rune), …

    2025年3月3日
    200
  • go语言怎么重复字符串

    在go语言中,可以使用Strings包里的Repeat()函数来重复字符串;该函数可以重复指定次数的字符串 本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。 在go语言中,可以使用Strings包里的Repea…

    2025年3月3日
    200
  • goland是什么

    Goland是由JetBrains公司专为Go开发的跨平台的商业IDE,旨在为Go开发者提供的一个符合人体工程学的IDE。Goland整合了IntelliJ 平台(一个用于 java 语言开发的集成环境,也可用于其他开发语言),提供了针对G…

    2025年3月3日 编程技术
    200
  • golang包的特性是什么

    特性:1、包名一般是小写,用一个简短且有意义的名称;2、包名一般要和所在的目录同名,也可不同名,包名中不能包含“-”等特殊符号;3、包一般使用域名作为目录名称,这样能保证包名的唯一性;4、包名为main的包为应用程序的入口包,编译源码时如果…

    2025年3月3日
    200
  • golang切片的长度与容量是什么

    在golang中,切片长度就是切片中元素的数量;切片容量是从创建切片的索引开始的底层数组中元素的数量,即从切片的第一个元素开始数,到其底层数组元素末尾的个数。切片的长度与容量是可以计算的,内置方法len()可获取长度,cap()可获取容量;…

    2025年3月3日
    200
  • go语言中数组与切片有什么区别

    数组与切片的区别:1、切片是指针类型,数组是值类型;2、数组的赋值形式为值传递,切片的赋值形式为引用传递;3、数组的长度是固定的,而切片长度可以任意调整(切片是动态的数组);4、数组的长度是固定的,而切片长度可以任意调整(切片是动态的数组)…

    2025年3月3日
    200
  • go语言怎么比较字符串

    比较方法:1、直接使用“==”运算符比较,语法“str1 == str2”,该方法区分大小写。2、利用strings包的Compare()函数比较,语法“strings.Compare(a,b)”;返回值为int类型,0表示两数相等,1表示…

    2025年3月3日
    200
  • golang怎么添加list元素

    添加方法:1、用InsertBefore()函数在列表指定元素(mark点)前插入元素,语法“InsertBefore(v,mark)”;2、用InsertAfter()函数在列表指定元素(mark点)后插入元素,语法“InsertAfte…

    2025年3月3日 编程技术
    200

发表回复

登录后才能评论