Go基础-map
map
也就是Python中字典的概念,它的格式为map[keyType]valueType
我们看下面的代码,map
的读取和设置也类似slice
一样,通过key
来操作,只是slice
的index
只能是int
类型,而map
多了很多类型,可以是int
,可以是string
及所有完全定义了==
与!=
操作的类型.
// 声明一个key是字符串,值为int的字典,这种方式的声明需要在使用之前使用make初始化
var numbers map[string]int
// 另一种map的声明方式
numbers = make(map[string]int)
numbers["one"] = 1 //赋值
numbers["ten"] = 10 //赋值
numbers["three"] = 3
fmt.Println("第三个数字是: ", numbers["three"]) // 读取数据
// 打印出来如:第三个数字是: 3
这个map
就像我们平常看到的表格一样,左边是key
,右边列是值
使用map
过程中需要注意的几点:
map
是无序的,每次打印出来的map
都会不一样,它不能通过index
获取,而必须通过key
获取map
的长度不是固定的,也就是和slice
一样们也是一种引用类型内置的
len
函数同样适用于map
,返回map
拥有的key
的数量map
的值可以很方便的修改,通过numbers["one"]=11
可以很容易的把key
为one
的字典值改为11
map
和其他基本型别不同,它不是thread-safe,在多个go-routine存取时,必须使用mutex lock机制
通过delete
删除map
// 初始化一个字典
rating := map[string]float32{"C":5, "Go":4.5, "Python":4.5, "C++":2 }
// map有两个返回值,第二个返回值,如果不存在key,那么ok为false,如果存在ok为true
csharpRating, ok := rating["C#"]
if ok {
fmt.Println("C# is in the map and its rating is ", csharpRating)
} else {
fmt.Println("We have no rating associated with C# in the map")
}
delete(rating, "C") // 删除key为C的元素
上面说过了,map
也是一种引用类型,如果两个map
同时指向一个底层,那么一个改变,另一个也相应的改变:
m := make(map[string]string)
m["Hello"] = "Bonjour"
m1 := m
m1["Hello"] = "Salut" // 现在m["hello"]的值已经是Salut了
- 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《龙行博客》。
- 本文网址:https://www.liaotaoo.cn/341.html
- 上篇文章:Go基础-make,new
- 下篇文章:Go基础-slice(切片)