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

posted @ 2022-09-16 17:15  那就凑个整吧  阅读(28)  评论(0编辑  收藏  举报