龙行博客

走路看风景,经历看人生,岁月留痕迹,人生留轨迹,17的历史,18的豪情,时间的匆忙,人生的风景,放开心胸往前走,成功再远行,放开理想往前走,梦想再行动。
现在位置:首页 > 编程语言 > Golang > Go基础-map

Go基础-map

龙行    Golang    2020-3-11    621    0评论    

Go基础-map

map也就是Python中字典的概念,它的格式为map[keyType]valueType

我们看下面的代码,map的读取和设置也类似slice一样,通过key来操作,只是sliceindex只能是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可以很容易的把keyone的字典值改为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了
评论一下 分享本文 赞助站长

赞助站长X

扫码赞助站长
联系站长
龙行博客
  • 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《龙行博客》。
  • 本文网址:https://www.liaotaoo.cn/341.html
  • 上篇文章:Go基础-make,new
  • 下篇文章:Go基础-slice(切片)
  • go golang
快捷导航
联系博主
在线壁纸
给我留言
四四五五
音乐欣赏
返回顶部