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比较

浙公网安备 33010602011771号