GoLang之map底层系列一(map初始化)

1.var创建不初始化值

1.var声明变量不初始化,默认 map 是 nil,nil map 不能用来存放键值对 ;
2.var声明变量不初始化,可以使用len函数

var map_variable map[key_data_type]value_data_type
func main() {
	var a map[int]bool
	fmt.Println(a) //输出:map[]
	fmt.Println(len(a))//输出:0
}
func main() {
	var a map[int]bool
	a[1] = true//在这里运行时报错
	fmt.Println(a)
}

2.var创建初始化值

1.var创建初始化值的话,可以使用len函数,也可以后续再添加值


func main() {
	var a map[int]bool = map[int]bool{
		1: true,
		2: false,
	}
	fmt.Println(len(a))//2
	//可以后续再添加值
	a[3] = false
	a[4] = true
	fmt.Println(len(a))//4
	fmt.Println(a) //输出:map[1:true 2:false 3:false 4:true]
}

3.make创建不指定大小

1.make初始化map时候如果不指定大小的话,能对map使用len()函数
2.make初始化map时候如果不指定大小的话,初始化的map不是nil

/* 使用 make 函数不指定cap */
map_variable := make(map[key_data_type]value_data_type)
func main() {
	a := make(map[int]bool)
	if a == nil {
		fmt.Println("a是nil")
	} else {
		fmt.Println("a不是nil")//输出a不是nil
	}

	fmt.Println(len(a)) //0
	fmt.Println(a)      //map[]
	a[1] = false
	fmt.Println(len(a)) //1
	fmt.Println(a)      //map[1:false]
}

4.make创建指定大小

make创建指定大小,但即使如果超出大小了,仍然可以添加键值对

在这里插入图片描述

func main() {
	a := make(map[int]bool, 2)
	if a == nil {
		fmt.Println("a是nil")
	} else {
		fmt.Println("a不是nil") //输出a不是nil
	}

	fmt.Println(len(a)) //0
	fmt.Println(a)      //map[]
	a[1] = false
	fmt.Println(len(a)) //1
	fmt.Println(a)      //map[1:false]
}
func main() {
	a := make(map[int]bool, 2)
	a[1] = false
	a[2] = false
	a[3] = true
	fmt.Println(a) //map[1:false 2:false 3:true]
	fmt.Println(len(a)) //3
}

5.var结合make创建不指定大小

func main() {
	var countryCapitalMap map[string]string 
	if countryCapitalMap == nil {
		fmt.Println("a是nil") //a是nil
	} else {
		fmt.Println("a不是nil")
	}
	fmt.Println(countryCapitalMap)      //map[]
	fmt.Println(len(countryCapitalMap)) //0

	
	countryCapitalMap = make(map[string]string)
	if countryCapitalMap == nil {
		fmt.Println("a是nil")
	} else {
		fmt.Println("a不是nil") //a不是nil
	}
	countryCapitalMap["France"] = "巴黎"
	countryCapitalMap["Italy"] = "罗马"
	countryCapitalMap["Japan"] = "东京"
	countryCapitalMap["India "] = "新德里"
	fmt.Println(countryCapitalMap)      //map[France:巴黎 India :新德里 Italy:罗马 Japan:东京]
	fmt.Println(len(countryCapitalMap)) //4
}

6.var结合make创建指定大小

func main() {
	var countryCapitalMap map[string]string
	if countryCapitalMap == nil {
		fmt.Println("a是nil") //a是nil
	} else {
		fmt.Println("a不是nil")
	}
	fmt.Println(countryCapitalMap)      //map[]
	fmt.Println(len(countryCapitalMap)) //0

	countryCapitalMap = make(map[string]string, 2)
	if countryCapitalMap == nil {
		fmt.Println("a是nil")
	} else {
		fmt.Println("a不是nil") //a不是nil
	}
	countryCapitalMap["France"] = "巴黎"

	fmt.Println(countryCapitalMap)//map[France:巴黎]    
	fmt.Println(len(countryCapitalMap))//1

	countryCapitalMap["Italy"] = "罗马"
	countryCapitalMap["Japan"] = "东京"
	countryCapitalMap["India "] = "新德里"
	fmt.Println(countryCapitalMap)      //map[France:巴黎 India :新德里 Italy:罗马 Japan:东京]
	fmt.Println(len(countryCapitalMap)) //4
}

7.创建不初始化值

func main() {
	a := map[int]bool{}
	if a == nil {
		fmt.Println("a是nil")
	} else {
		fmt.Println("a不是nil") //a不是nil
	}
	fmt.Println(a)      //map[]
	fmt.Println(len(a)) //0
	//可以后续再添加值
	a[3] = false
	a[4] = true
	fmt.Println(len(a)) //2
	fmt.Println(a)      //输出:map[3:false 4:true]
}

8.创建初始化值

func main() {
	a := map[int]bool{
		1: true,
		2: false,
	}
	fmt.Println(len(a)) //2
	//可以后续再添加值
	a[3] = false
	a[4] = true
	fmt.Println(len(a)) //4
	fmt.Println(a)      //输出:map[1:true 2:false 3:false 4:true]
}

9.var创建不初始化值再集体赋值

image-20220109180957623

10.make创建不指定大小再集体赋值

image-20220121161341671