热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GoLang基础数据类型

GoLang基础数据类型--->字典(map)详解作者:尹正杰版权声

                   GoLang基础数据类型--->字典(map)详解

                                            作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

   可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是函数吗?学过python的小伙伴可能会想到map这个函数。其实它就是Golang中的字典。下面跟我一起看看它的特性吧。map 也就是 Python 中字典的概念,它的格式为“map[keyType]valueType”。 map 的读取和设置也类似 slice 一样,通过 key 来操作,只是 slice 的index 只能是`int`类型,而 map 多了很多类型,可以是 int ,可以是 string及所有完全定义了 == 与 != 操作的类型。

 

一.map的赋值方式

1.先的声明再初始化最后赋值

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import (
11 "fmt"
12 "reflect"
13 )
14
15 func main() {
16 var yinzhengjie map[string]string //先声明一个字典(map)名字叫做yinzhengjie。其key所对应的数据类型是“string”[字符串],value所对应的数据类型也是“string”。
17 fmt.Printf("判断yinzhengjie字典是否为空:【%v】\n",yinzhengjie == nil) //声明的字典,默认为空,需要用make进行初始化操作(map是引用类型,未初始化的是指向nil,初始化了以后应该就有自己的内存空间了,所以不是nil。)所以返回值为空。
18 fmt.Printf("第一次查看yinzhengjie字典的值:【%v】\n",yinzhengjie)
19 yinzhengjie = make(map[string]string) //再使用make函数进行初始化创建一个非nil的map,nil map不能赋值,如果直接赋值会报错:“panic: assignment to entry in nil map”
20 fmt.Printf("再次判断yinzhengjie字典是否为空:【%v】\n",yinzhengjie == nil) //你就把它理解为一个指针,没初始化就是nil,make之后分配内存了,一旦分配了内存地址就不为空了
21 fmt.Printf("第二次查看yinzhengjie字典的值:【%v】\n",yinzhengjie)
22 yinzhengjie["name"] = "尹正杰"
23 fmt.Printf("yinzhengjie字典的类型为:【%v】\n",reflect.TypeOf(yinzhengjie))
24 fmt.Printf("第三次查看yinzhengjie字典的值:【%v】\n",yinzhengjie)
25 }
26
27
28
29 #以上代码执行结果如下:
30 判断yinzhengjie字典是否为空:【true】
31 第一次查看yinzhengjie字典的值:【map[]】
32 再次判断yinzhengjie字典是否为空:【false】
33 第二次查看yinzhengjie字典的值:【map[]】
34 yinzhengjie字典的类型为:【map[string]string】
35 第三次查看yinzhengjie字典的值:【map[name:尹正杰]】

 

2.直接make进行初始化之后再赋值

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import "fmt"
11
12 func main() {
13 yinzhengjie := make(map[string]int) //表示创建一个key为string,value的值为int的数据类型。
14 yinzhengjie["yzj"] = 25
15 fmt.Println(yinzhengjie)
16 }
17
18
19
20 #以上代码执行结果如下:
21 map[yzj:25]

3.直接初始化赋值

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import "fmt"
11
12 func main() {
13 yinzhengjie := map[string]int{
14 "尹正杰":18,
15 "饼干":20,
16 }
17 fmt.Println(yinzhengjie)
18 }
19
20
21
22 #以上代码执行结果如下:
23 map[尹正杰:18 饼干:20]

 

二.map的增删改查

1.字典的赋值操作

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import "fmt"
11
12 func main() {
13 yinzhengjie := make(map[int]string)
14 letter := []string{"a","b","c","d","e","f","g","h"}
15 for k,v := range letter{
16 yinzhengjie[k] = v
17 }
18 fmt.Println(yinzhengjie) //注意,字典是无序的哟!
19 }
20
21
22
23
24 #以上代码执行结果如下:
25 map[7:h 0:a 1:b 2:c 3:d 4:e 5:f 6:g]

2.字典的删除操作

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import "fmt"
11
12 func main() {
13 yinzhengjie := make(map[int]string)
14 letter := []string{"a","b","c","d","e","f","g","h"}
15 for k,v := range letter{
16 //fmt.Println(k,v)
17 yinzhengjie[k] = v
18 }
19 fmt.Println(yinzhengjie) //注意,字典是无序的哟!
20
21 for i:=0;i<4 ;i++ {
22 delete(yinzhengjie,i) //删除字典中key所对应的value.1
23 }
24 fmt.Println(yinzhengjie)
25
26 for k := range yinzhengjie{
27 delete(yinzhengjie,k) //删除整个字典的数据
28 }
29 fmt.Println(yinzhengjie)
30 fmt.Println(yinzhengjie==nil) //字典的“壳子”还在,空字典也是有地址的。所以返回值是false!
31 }
32
33
34
35 #以上代码执行结果如下:
36 删除之前的样子:【map[5:f 6:g 7:h 0:a 1:b 2:c 3:d 4:e]】
37 第一次删除之后的样子:【map[5:f 6:g 7:h 4:e]】
38 第二次删除之后的样子:【map[]】
39 字典被清空之后是否为空:【false】

 3.字典的修改操作

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import "fmt"
11
12 func main() {
13 yinzhengjie := make(map[int]string)
14 letter := []string{"a","b","c","d","e","f","g","h"}
15 for k,v := range letter{
16 //fmt.Println(k,v)
17 yinzhengjie[k] = v
18 }
19 fmt.Printf("修改之前的样子:【%v】\n",yinzhengjie)
20 yzj := yinzhengjie //map是一种引用类型,如果两个map同时指向一个底层,那么一个改变,另一个也相应的改变。
21 yzj[0] = "尹正杰" //修改字典下标所对应的值。
22 yzj[1] = "yinzhengjie"
23 fmt.Printf("修改之后的样子:【%v】\n",yinzhengjie)//注意,字典是无序的哟!
24 }
25
26
27
28 #以上代码执行结果如下:
29 修改之前的样子:【map[0:a 1:b 2:c 3:d 4:e 5:f 6:g 7:h]】
30 修改之后的样子:【map[7:h 0:尹正杰 1:yinzhengjie 2:c 3:d 4:e 5:f 6:g]】

4.字典的查询方式

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import "fmt"
11
12 func main() {
13 yinzhengjie := make(map[int]string)
14 letter := []string{"a","b","c","d","e","f","g","h"}
15 for k,v := range letter{
16 yinzhengjie[k] = v
17 }
18 fmt.Println(yinzhengjie) //注意,字典是无序的哟!我下面之所以通过循环遍历,是因为的确存在哪些key哟!
19
20 for i,j := range yinzhengjie{ //遍历key和value。
21 fmt.Println("key=",i,"value=",j)
22 }
23
24 for i := range yinzhengjie{ //只遍历key
25 fmt.Println(i)
26 }
27 }
28
29
30
31
32 #以上代码执行结果如下:
33 map[3:d 4:e 5:f 6:g 7:h 0:a 1:b 2:c]
34 key= 6 value= g
35 key= 7 value= h
36 key= 0 value= a
37 key= 1 value= b
38 key= 2 value= c
39 key= 3 value= d
40 key= 4 value= e
41 key= 5 value= f
42 3
43 4
44 5
45 6
46 7
47 0
48 1
49 2

 5.原地修改字典的Value

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import "fmt"
11
12 type Student struct {
13 ID int
14 NAME string
15 }
16
17 func main() {
18 dict := make(map[int]*Student)
19 dict[1] = &Student{
20 ID:100,
21 NAME:"yinzhengjie",
22 }
23
24 dict[2] = &Student{
25 ID:200,
26 NAME:"尹正杰",
27 }
28
29
30 fmt.Println(dict[1])
31 s := dict[1]
32 s.ID = 100000 //原地修改字典的value.
33 fmt.Println(dict)
34 fmt.Println(dict[1])
35 }
36
37
38
39 #以上代码执行结果如下:
40 &{100 yinzhengjie}
41 map[1:0xc042044400 2:0xc042044420]
42 &{100000 yinzhengjie}

 

三.map的常用技巧

1.判断map键值是否存在

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import "fmt"
11
12 func main() {
13 yinzhengjie := make(map[int]string)
14 letter := []string{"a","b","c","d","e","f","g","h"}
15 for k,v := range letter{
16 yinzhengjie[k] = v
17 }
18 fmt.Printf("字典中的值为:【%v】\n",yinzhengjie) //注意,字典是无序的哟!
19 if v, ok := yinzhengjie[1]; ok {
20 fmt.Println("存在key=",v)
21 }else {
22 fmt.Println("没有找到key=",v)
23 }
24
25 v ,ok := yinzhengjie[1]
26 if ok {
27 fmt.Println("再一次确认,已经存在key=",v)
28 }else {
29 fmt.Println("再一次确认,没有找到key=",v)
30 }
31 }
32
33
34
35
36 #以上代码执行结果如下:
37 字典中的值为:【map[3:d 4:e 5:f 6:g 7:h 0:a 1:b 2:c]】
38 存在key= b
39 再一次确认,已经存在key= b

 

2.map的排序

  我们都知道字典的默认都是无需的,但是我们可以借用标准库的包来进行基于字母或数字的顺序来排序,从而达到我们想要的结果,我们就以2016全球计算机语言排行前十的案例来展示吧:

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import (
11 "fmt"
12 "sort"
13 )
14
15 func main() {
16 var ProgramingLanguage = map[string]int{
17 "Java": 0,
18 "C": 1,
19 "C++": 2,
20 "Python": 3,
21 "C#": 4,
22 "PHP": 5,
23 "Javascript": 6,
24 "Visual Basic.NET": 7,
25 "Perl": 8,
26 "Assembly language": 9,
27 "Ruby": 10,
28 }
29 var SortString []string
30 for k := range ProgramingLanguage {
31 SortString = append(SortString, k)
32 }
33 sort.Strings(SortString) //会根据字母的顺序进行排序。
34 for _, k := range SortString {
35 fmt.Println("Key:", k, "Value:", ProgramingLanguage[k])
36 }
37 }
38
39
40
41 #以上代码执行结果如下:
42 Key: Assembly language Value: 9
43 Key: C Value: 1
44 Key: C# Value: 4
45 Key: C++ Value: 2
46 Key: Java Value: 0
47 Key: Javascript Value: 6
48 Key: PHP Value: 5
49 Key: Perl Value: 8
50 Key: Python Value: 3
51 Key: Ruby Value: 10
52 Key: Visual Basic.NET Value: 7

3.map的嵌套

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import "fmt"
11
12 type EmployeeInformation map[string]int
13
14 func main() {
15
16 StaffQuarters := make(map[string]EmployeeInformation)
17 EmployeeNumber := make(EmployeeInformation)
18 EmployeeNumber["yinzhengjie"] = 23
19 EmployeeNumber["bingan"] = 24
20
21 StaffQuarters["888"] = EmployeeNumber
22 StaffQuarters["999"] = EmployeeInformation{"fanbinxin": 25, "zhouzhiruo": 26,}
23 fmt.Println(StaffQuarters)
24 }
25
26
27
28 #以上代码执行结果如下:
29 map[888:map[bingan:24 yinzhengjie:23] 999:map[fanbinxin:25 zhouzhiruo:26]]

 

4.map的嵌套用法展示

 

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import "fmt"
11
12 func main() {
13 Province:=make(map[string]map[string][]string) //定义省的字典
14 City:=make(map[string][]string) //定义市区的字典
15 Scenery := make(map[string][]string) //定义景区的字典
16 Scenery["西安"] = []string{ "秦始皇兵马俑","大雁塔","大唐芙蓉园","华清池","黄巢堡国家森林公园","西安碑林博物馆","骊山国家森林公园","西安城墙","秦始皇陵","翠华山",}
17 Scenery["安康"] = []string{"中坝大峡谷","香溪洞","安康双龙生态旅游度假区","瀛湖生态旅游景区","简车湾休闲景区","南宫山","天书峡景区","汉江燕翔洞景区","飞渡峡-黄安坝景区","千层河",}
18 City["西安市区"]=[]string{"新城区","碑林区","莲湖区","灞桥区","未央区","雁塔区","阎良区","临潼区","长安区","高陵区","咸阳区"}
19 City["安康市区"]=[]string{"汉滨区","汉阴县","石泉县","宁陕县","紫阳县","岚皋县","平利县","镇平县","旬阳县","白河县",}
20 Province["陕西"]=City
21 City["西安景区"] = Scenery["西安"]
22 City["安康景区"] = Scenery["安康"]
23 for k,v := range Province{
24 fmt.Println(k,v)
25 for x,y := range v{
26 fmt.Println(x,y)
27 }
28 }
29 }
30
31
32
33
34 #以上代码执行结果如下:
35 陕西 map[安康市区:[汉滨区 汉阴县 石泉县 宁陕县 紫阳县 岚皋县 平利县 镇平县 旬阳县 白河县] 西安景区:[秦始皇兵马俑 大雁塔 大唐芙蓉园 华清池 黄巢堡国家森林公园 西安碑林博物馆 骊山国家森林公园 西安城墙 秦始皇陵 翠华山] 安康景区:[中坝大峡谷 香溪洞 安康双龙生态旅游度假区 瀛湖生态旅游景区 简车湾休闲景区 南宫山 天书峡景区 汉江燕翔洞景区 飞渡峡-黄安坝景区 千层河] 西安市区:[新城区 碑林区 莲湖区 灞桥区 未央区 雁塔区 阎良区 临潼区 长安区 高陵区 咸阳区]]
36 西安景区 [秦始皇兵马俑 大雁塔 大唐芙蓉园 华清池 黄巢堡国家森林公园 西安碑林博物馆 骊山国家森林公园 西安城墙 秦始皇陵 翠华山]
37 安康景区 [中坝大峡谷 香溪洞 安康双龙生态旅游度假区 瀛湖生态旅游景区 简车湾休闲景区 南宫山 天书峡景区 汉江燕翔洞景区 飞渡峡-黄安坝景区 千层河]
38 西安市区 [新城区 碑林区 莲湖区 灞桥区 未央区 雁塔区 阎良区 临潼区 长安区 高陵区 咸阳区]
39 安康市区 [汉滨区 汉阴县 石泉县 宁陕县 紫阳县 岚皋县 平利县 镇平县 旬阳县 白河县]

 

四.map的进阶知识

1.map的挖坑

  Captial["北京"]["大兴区"]会发现这个值已经没有了,取而代之的是Captial["北京"]["密云县"]这是因为 Area 和 County 都是 map[string]int 类型的数据,Golang 直接把 ["大兴区"] 里的数据从 Area 替换成了 County,而不会递归地添加 map 中缺失的数据。

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import "fmt"
11
12 func main() {
13 Captial := make(map[string]map[string]int)
14 Area := make(map[string]int)
15 Area["大兴区"] = 100
16 Captial["北京"] = Area
17 County := make(map[string]int)
18 County["密云县"] = 200
19 fmt.Println(Captial["北京"]["大兴区"]) //目前是可以访问到“Captial["北京"]["大兴区"]”的值的
20 Captial["北京"] = County
21 fmt.Println(Captial["北京"]["大兴区"]) //但是你执行了上一行的代码,你会发现你访问不到它的值100啦,但是你却发现可以访问下面一行代码的值。
22 fmt.Println(Captial["北京"]["密云县"])
23 }
24
25
26
27
28 #以上代码执行结果如下:
29 100
30 0
31 200

2.map的填坑

  你自己想到上面的解决方法了没?其实很简单,我们只要做一个条件判断即可,代码如下:

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import "fmt"
11
12 func main() {
13 Captial := make(map[string]map[string]int)
14 Area := make(map[string]int)
15 Area["大兴区"] = 100
16 Captial["北京"] = Area
17
18 if _, ok := Captial["北京"]; ok {
19 Captial["北京"]["密云县"] = 200 //判断,如果存在Captial["北京"]这个key就只做字典的追加操作。
20 }else {
21 County := make(map[string]int)
22 Captial["北京"] = County
23 County["密云县"] = 200 //如果不存在就
24 }
25 fmt.Println(Captial["北京"]["大兴区"]) //可以访问到“Captial["北京"]["大兴区"]”的值100啦。
26 fmt.Println(Captial["北京"]["密云县"])
27 }
28
29
30
31 #以上代码执行结果如下:
32 100
33 200

 

3.定义一个集合的思想

  了解过Python的童鞋,可能听说过集合,但是我要告诉你一个好消息和一个坏消息,你想先听哪一个?坏消息就是Golang没有集合这个概念;好消息是我们可以用Golang的make函数来实现集合的思想,下面跟我一起看个例子吧!

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import "fmt"
11
12 func main() {
13 set := make(map[string]bool) //定义一个map
14 set["yinzhengjie"] = true //给已经存在的变量定义为真
15 if set["yinzhengjie"] {
16 fmt.Printf("已经存在明为yinzhengjie的key,其值为【%v】\n",set["yinzhengjie"])
17
18 } else {
19 fmt.Println("该变量不存在!")
20 }
21
22 if set["yzj"] { //判断是否 存在变量
23 fmt.Println("已经存在该变量")
24
25 } else {
26 fmt.Printf("不存在名为“yzj”的key,其值为【%v】\n",set["yzj"])
27
28 }
29 fmt.Println(set) //我们来一起查看一下这个网站吧。
30 }
31
32
33
34
35 #以上代码执行结果如下:
36 已经存在该变量key,其值为【true】
37 不存在名为“yzj”的key,其值为【false】
38 map[yinzhengjie:true]

 

4.map的寻址

   golang中的map并没有保证它们的value值的地址是不可变的,因为value值的地址很有可能被重新分配。在golang中,一个容量不断增长的map可能会导致原来map中的一些元素发生rehashing,使得他们被重新分配到新的storage location上,这样可能会导致原先得到的address变得不可用。就是所谓的map member 的 not addresable。

  换句话说,在golang设计的时候,map中的value值应该是地址不可达的,就是说直接取map中的元素的地址会报错.一个修改的办法就是把value值设置成为指针的形式,这样就相当于添加了一个额外的记录(entry),即使真正需要的那个值的位置发生了变化,也可以重定向(redirection)过去。

 1 /*
2 #!/usr/bin/env gorun
3 @author :yinzhengjie
4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
5 EMAIL:y1053419035@qq.com
6 */
7
8 package main
9
10 import (
11 "fmt"
12 )
13
14 type NameType struct { //定义一个结构体,类似Python语言中定义一个类的概念。
15 Blog string
16 }
17
18 func main() {
19 BlogAddress := make(map[string]*NameType)
20 BlogAddress["yinzhengjie"] = &NameType{} //这里赋值的是指针。
21 BlogAddress["yinzhengjie"].Blog = "http://www.cnblogs.com/yinzhengjie"
22 fmt.Println(BlogAddress)
23 }
24
25
26
27
28 #以上代码执行结果如下:
29 map[yinzhengjie:0xc042008230]

 

5.扩展小知识:make和new的区别

   make 只能为 slice、map或 channel 类型分配内存并初始化,同时返回一个有初始值的 slice、map 或 channel 类型引用,不是指针。内建函数 new 用来分配内存,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配类型零值的指针。

 

 

 

 


 


推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • 使用Flutternewintegration_test进行示例集成测试?回答首先在dev下的p ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • gitlab重置password
    ruby没怎么学,自己搭建的gitlab的rootpassword又忘了。幸好看见此帖子,试验okhttp:roland.kierkels.netgitreset-your-git ... [详细]
  • python oj刷题网站_中小学计算机竞赛去哪里刷题?橙旭园OJ系统上线啦!
    原标题:中小学计算机竞赛去哪里刷题?橙旭园OJ系统上线啦!相信许多人在学习完编程之后都会茫然,感觉自己无所不能࿰ ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • PreparedStatement防止SQL注入
    添加数据:packagecom.hyc.study03;importcom.hyc.study02.utils.JDBCUtils;importjava.sql ... [详细]
author-avatar
三十二号t娶我吧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有