分享
Go基础-map
xuheazx · · 3752 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
// xuhh_go_map project
/*
1.map的特点:
a.map是go语言的内置引用类型,所以多个map指向同一个底层的情况下,一个值发生变化,全部发生变化
b.map是无序的,每次迭代的顺序都是不确定的。
c.map只有 len 没有 cap。
d.map不是线程安全的,在多个go-routine中使用的时候,要加锁。
e.map[key]value
key 必须支持 运算符(== 、!= )的操作,例如 number/string/pointer/array/struct/interface
value 可以是任意类型。
2.map的创建:
a. new 进行创建
mapA := new(map[int]string)
*mapA = map[int]string{}
(*mapA)[112] = "112"
(*mapA)[110] = "110"
b.直接声明创建
var map1 map[int]string = map[int]string{}
map2 := map[int]string{
11: "11",
12: "12",
13: "13",
}
c.make进行创建
map3 := make(map[int]string, 1000) // 1000 是map的容量 ,这点和slice是一样的,预先申请一块内存,避免以后频繁扩张,提升性能
3.map 的一些基本操作
a.判断键值是否存在
if v, ok := map1[5]; ok == true {
fmt.Println("this key is exit ", v)
} else {
fmt.Println("this key is not exit ")
}
b.增加
map[key] = value
c.修改
map 在修改value的时候
如果value是值类型,要想改变值,需要全部替换(value 换 value)
如果是引用类型,则可以直接赋值替换
mapS := map[string]PERSON{}
mapS["xuhh"] = PERSON{name: "xuhh", old: 26}
mapS["xuhh"].name = "xuhehe" // error cannot assign to mapS["xuhh"].name
d.删除
可以在迭代的时候安全删除键值对
delete(map, key)
e.迭代遍历
for k, v := range map {
fmt.Println("key = ", k, "value = ", v)
}
*/package main import ( "fmt" ) type PERSON struct { name string old int } func main() { //new 进行创建 mapA := new(map[int]string) *mapA = map[int]string{} (*mapA)[112] = "112" (*mapA)[110] = "110" for v := range *mapA { fmt.Println(v) } //直接创建,可以直接初始化: var map1 map[int]string = map[int]string{} map2 := map[int]string{ 11: "11", 12: "12", 13: "13", } fmt.Println(map2) map1[2] = "222" map1[3] = "333" map1[1] = "111" map1[6] = "666" map1[8] = "888" map1[5] = "555" fmt.Println(map1) // make 创建 map3 := make(map[int]string, 1000) map3[22] = "22" fmt.Println(map3) // map 的操作 // 查找 if v, ok := map1[5]; ok == true { fmt.Println("this key is exit ", v) } else { fmt.Println("this key is not exit ") } //add map1[5] = "exit" fmt.Println(map1[5]) //modify mapS := map[string]PERSON{} mapS["xuhh"] = PERSON{name: "xuhh", old: 26} //mapS["xuhh"].name = "xuhehe" // error cannot assign to mapS["xuhh"].name //map 在操作value 的时候,如果value 是 值类型 ,要想改变值,需要全部替换(value 换 value),如果不是引用类型,则可以直接赋值替换 //delete delete(map1, 5) if _, ok := map1[5]; !ok { fmt.Println("this key is deleted") } //迭代遍历 for k, v := range map1 { fmt.Println("key = ", k, "value = ", v) } }
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信3752 次点击
上一篇:go lang中的import
下一篇:go编程之beego\orm使用
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
/*
1.map的特点:
a.map是go语言的内置引用类型,所以多个map指向同一个底层的情况下,一个值发生变化,全部发生变化
b.map是无序的,每次迭代的顺序都是不确定的。
c.map只有 len 没有 cap。
d.map不是线程安全的,在多个go-routine中使用的时候,要加锁。
e.map[key]value
key 必须支持 运算符(== 、!= )的操作,例如 number/string/pointer/array/struct/interface
value 可以是任意类型。
2.map的创建:
a. new 进行创建
mapA := new(map[int]string)
*mapA = map[int]string{}
(*mapA)[112] = "112"
(*mapA)[110] = "110"
b.直接声明创建
var map1 map[int]string = map[int]string{}
map2 := map[int]string{
11: "11",
12: "12",
13: "13",
}
c.make进行创建
map3 := make(map[int]string, 1000) // 1000 是map的容量 ,这点和slice是一样的,预先申请一块内存,避免以后频繁扩张,提升性能
3.map 的一些基本操作
a.判断键值是否存在
if v, ok := map1[5]; ok == true {
fmt.Println("this key is exit ", v)
} else {
fmt.Println("this key is not exit ")
}
b.增加
map[key] = value
c.修改
map 在修改value的时候
如果value是值类型,要想改变值,需要全部替换(value 换 value)
如果是引用类型,则可以直接赋值替换
mapS := map[string]PERSON{}
mapS["xuhh"] = PERSON{name: "xuhh", old: 26}
mapS["xuhh"].name = "xuhehe" // error cannot assign to mapS["xuhh"].name
d.删除
可以在迭代的时候安全删除键值对
delete(map, key)
e.迭代遍历
for k, v := range map {
fmt.Println("key = ", k, "value = ", v)
}
*/package main import ( "fmt" ) type PERSON struct { name string old int } func main() { //new 进行创建 mapA := new(map[int]string) *mapA = map[int]string{} (*mapA)[112] = "112" (*mapA)[110] = "110" for v := range *mapA { fmt.Println(v) } //直接创建,可以直接初始化: var map1 map[int]string = map[int]string{} map2 := map[int]string{ 11: "11", 12: "12", 13: "13", } fmt.Println(map2) map1[2] = "222" map1[3] = "333" map1[1] = "111" map1[6] = "666" map1[8] = "888" map1[5] = "555" fmt.Println(map1) // make 创建 map3 := make(map[int]string, 1000) map3[22] = "22" fmt.Println(map3) // map 的操作 // 查找 if v, ok := map1[5]; ok == true { fmt.Println("this key is exit ", v) } else { fmt.Println("this key is not exit ") } //add map1[5] = "exit" fmt.Println(map1[5]) //modify mapS := map[string]PERSON{} mapS["xuhh"] = PERSON{name: "xuhh", old: 26} //mapS["xuhh"].name = "xuhehe" // error cannot assign to mapS["xuhh"].name //map 在操作value 的时候,如果value 是 值类型 ,要想改变值,需要全部替换(value 换 value),如果不是引用类型,则可以直接赋值替换 //delete delete(map1, 5) if _, ok := map1[5]; !ok { fmt.Println("this key is deleted") } //迭代遍历 for k, v := range map1 { fmt.Println("key = ", k, "value = ", v) } }