开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map: map 的介绍和声明】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/625/detail/9656
map 的介绍和声明
目录:
一、map 的基本介绍
二、Map 的声明
一、map 的基本介绍
map 是 key-value 数据结构,又称为字段或者关联数组。类似其它编程语言的集合,在编程中是经常使用到。
有一种数据结构叫集合,它通过 key 可以找到对应的 value,在编程中使用频率很高而 map 就是 key-value 数据结构通过 key 可以找到对应的值。当想找到或者存储一个学生信息,学生编号做 key,名字做 value,此时就通过的数据结构将他们关联了起来。
二、map 的声明
1.map 的基本语法
var map 变量名称 map(这个 map 是一个关键字,这个 map 是固定的)[keytype](这里写上 key 的说明他的数据类型是什么)valuetype(说明这个值得数据类型是什么)
(1)key 可以是什么类型
golang 中的 map,的 key 可以是很多种类型,比如 bool,数字,string,指针,channel (管道),还可以是只包含前面几个类型的接口,结构体,数组
通常为 int . string(重点)
注意: slice,map 还有 function 不可以,因为这几个没法用==来判断( key value 有没有存在 key,主要是用来判断。)
(2)valuetype 可以是什么类型
valuetype 的类型和 key 基本一样,这里就不再赘述了
通常为:数字(整数,浮点数), string(比如要保留学生的名字),map( map 的值可以是另一个 map 来构成多重 map ), struct(结构体)(map 值的数据类型)
2. map 声明的案例:
var a(变量名) map[string](key)string(值)
var a map[string]int
var a map[int]string
var a map[string]map[string]string( map 这里有两重 map ,声明一个 map 是不会分配内存)
注意:声明是不会分配内存的,初始化需要 make,分配内存后才能赋值和使用。(重要)与数组不一样,数组会自动分配内存空间,map 需要 make 才可以赋值与使用。
(1)案例演示
首先新建一个文件夹:chapter09-map demo01-main.go
代码:
package mainimport (
"fmt"
)
func main() {
// map的声明和注意事项
var a map[string]string
fmt.Printin(ab
}
此时输出是一个空的,因为没有 make。此时如果赋值会报错。
func main() i{
// map 的声明和注意事项
var a map[string]string(此时此刻的 map,a 没有数据空间则一定要报错)
a[ "no1"](这里是一个 key )="宋江”(赋予一个值)// ok?
fmt.Println(a)
}
如果想使用 map 需要先 make,make 的作用就是给 map 分配数据空间。
func main() {
// map 的声明和注意事项 var a map[string]string
//在使用 map 前,需要先 make , make 的作用就是给 map 分配数据空间
a = make(map[string]string, 10)
这里 make 的写法:前面一个参数写 map 的数据类型,后面参数写给 map 多大的数据空间。
a[ "no1"]="宋江”//ok?
fmt.Println(a)
如果此时后面又增加了两个
a[ "no2"]=“吴用”//ok?
a["no1"] ="武松”//ok?(这里 no1 与第一个重复)
//在使用 map 前,需要先 make , make 的作用就是给 map 分配数据空间 a = make(map[string]string,10)
a[ "no1"]="宋江”[/ok?
a[ "no2"]=“吴用”//ok?
a[ "no1"]="武松”//ok?
a[ "no3"]=“吴用”//ok?
fmt.Println(a)
此时说明 key 不能重复,会覆盖前面的值。但是值可以重复。
这里 golang 里面的 Map 是无序的,在每次运行的时候 key 是无序的。
总结:对以上代码的说明
(1) map 在使用前一定要 make
(2) map 的 key 是不能重复,如果重复了,则以最后这个 key-value 为准
(3) map 的 value 是可以相同的.
(4) map 的 key-value 是无序
(5)make 内置函数的说明
Func Make:
func make( Type, size IntegerType)Type:
内建函数 make 分配并初始化一个类型为切片、映射、或通道的对象。其第一个实参为类型,而非值。make 的返回类型与其参数相同,而非指向它的指针。其具体结果取决于具体的类型∶
切片: size 指定了其长度。该切片的容里等于其长度。切片支持第二个整数实参可用来指定不同的容里﹔它必须不小于其长度,因此 make([ ]int,0,10)会分配一个长度为 0,容里为 10 的切片。
映射︰初始分配的创建取决于 size,但产生的映射长度为 0。size 可以省略,这种情况下就会分配一个小的起始大小。
通道:通道的缓存根据指定的缓存容里初始化。若 size 为零或被省略,该信道即为无缓存的。