go之map
什么是map
map是在Go中将值(value)与键(key)关联的内置类型,通过相应的键可以获取到值
map的定义
是引用类型,需要初始化,如果不初始化就说nil
package main import "fmt" func main() { //var m map[key值类型]value类型 //make 初始化,不需要写数字---》数字有点用 var m map[string]string=make(map[string]string) fmt.Println(m) //map[] }
取值和赋值
package main import "fmt" func main() { var m map[string]string=make(map[string]string) fmt.Println(m) //map[] m["name"]="zys" m["age"]="19" fmt.Println(m) //map[age:19 name:zys] }
定义并赋值
package main import "fmt" func main() { var m map[string]string=map[string]string{"name":"zys","age":"19"} fmt.Println(m) //map[age:19 name:zys] }
定义了不初始化是nil
引用类型,当参数传递
package main import "fmt" func main() { var m map[string]string fmt.Println(m) //map[] nil,控制台打印出来的样子,本质是nil var m1 map[string]string = make(map[string]string) fmt.Println(m1) //map[] 不是nil,完全不一样 if m == nil { fmt.Println("m是nil") //m是nil } if m1 == nil { fmt.Println("m1是nil") } }
获取不存在的元素
package main import "fmt" func main() { var m map[string]string=map[string]string{"name":"zys","age":"19"} fmt.Println(m) fmt.Println(m["name"]) fmt.Println("---",m["hobby"]) //不会报错,返回 value的0值--》"" //因为不同类型0值是不一样的,后期我们没法通用的判断值是否存在 //取值,无论存在不存在都可以 v,ok:=m["hobby"] //v,ok:=m["name"] fmt.Println(v) fmt.Println(ok) if v,ok:=m["hobby"];ok{ fmt.Println(v) } }
赋值
存在就更新,不存在就新增
package main import "fmt" func main() { var m map[string]string=map[string]string{"name":"zys","age":"19"} m["name"]="xxx" m["hobby"]="篮球" fmt.Println(m) //map[age:19 hobby:篮球 name:xxx] }
删除map元素
内置函数delete
package main import "fmt" func main() { var m map[string]string=map[string]string{"name":"zys","age":"19"} m["name"]="xxx" m["hobby"]="篮球" fmt.Println(m) //map[age:19 hobby:篮球 name:xxx] delete(m,"name") fmt.Println(m) //map[age:19 hobby:篮球] }
map是引用类型
package main import "fmt" func main() { var m map[string]string=map[string]string{"name":"zys","age":"19"} testM(m) fmt.Println(m) //map[age:19 hobby:足球 name:lll] 存在类似于切片的坑,在函数内部增加元素的坑,只要函数中改就会影响原来的 } func testM(m map[string]string) { m["hobby"]="足球" m["name"]="lll" fmt.Println(m) //map[age:19 hobby:足球 name:lll] }
map==的使用
map之间不能使用==操作符判断,==只能用来检查map是否为nil,值类型才允许==比较,引用类型不允许==比较,只能用==和nil比较