10【保姆级】-GO语言的map

10【保姆级】-GO语言的map

  • 一、map
    • 1.1 基本定义
    • 1.2 使用的3种方式
      • 1.2.1 方式1 先声明后make
      • 1.2.2 方式2 声明的时候就make
      • 1.2.3 方式3 不make,直接赋值
    • 1.3 map的crud

之前我学过C、Java、Python语言时总结的经验:

  1. 先建立整体框架,然后再去抠细节。
  2. 先Know how,然后know why。
  3. 先做出来,然后再去一点点研究,才会事半功倍。
  4. 适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。
  5. 对于GO语言,切记遵守语法格式规则。(例如python语言、例如SpringBoot框架等)
    解释:某些知识点,就是很难了解,那么先做出来,然后继续向前学习,可能在某个时间点我们就会恍然大悟。

一、map

1.1 基本定义

map是key-value数据组构又称为字段或者关联数组。类似其它编程语言的集合在编程中是经常使用到。

基本语法
var map变量名 map [keytype] valuetype

key 可以是什么类型

golang中的map,的 key 可以是很多种类型,比如 bool, 数字,string,指针channel,还可以是只包含前面几个类型的 接口,结构体,数组
通常为int、string(其他类型很少使用)

注意: slice, map 还有 function 不可以,因为这几个没法用 == 来判断

valuetype 可以是什么类型

valuetype的类型和key基本一样。通常为: 数字(整数,浮点数),string,map,struct

map声明的举例:

  • var a map[string]string
  • var a map[stringlint
  • var a map[int]string
  • var a map[string]map[string] string

注意:声明是不会分配内存的,初始化需要make ,分配内存后才能赋值和使用

1.2 使用的3种方式

1.2.1 方式1 先声明后make

  1. map在使用前一定要make
  2. map的 key 是不能重复,如果重复了,则以最后这个 key-value 为准
  3. map的 value 是可以相同的
  4. map的 key-value 是无序
  5. make内置函数数目
func main() {
	//map 的声明和注意事项
	var a map[string]string
	// 使用前,需要先make。作用是:分配数据空间
	// make(map[string]string , 容量)
	// 容量:可以加入多少对数据 
	a = make(map[string]string, 10)
	a["N1"] = "张三1"
	a["N2"] = "张三2"
	a["N2"] = "张三22(我就替换了上面的 张三2)"
	a["N3"] = "我也叫张三1"
	fmt.Println(a) // map[N2:张三22(我就替换了上面的 张三2) N1:张三1 N3:我也叫张三1]
}

1.2.2 方式2 声明的时候就make

map2 := make(map[string]string)
map2["n3"] = "zhangsan3"
map2["n4"] = "zhangsan4"
fmt.Println(map2)  // map[n3:zhangsan3 n4:zhangsan4]

1.2.3 方式3 不make,直接赋值

map3 := map[string]string{
"n5": "zhangsan5",
"n6": "zhangsan6",
}
fmt.Println(map3) // map[n5:zhangsan5 n6:zhangsan6]

1.3 map的crud

新增和更改
ps:如果key存在,那么就跟新,如果不存在,就会增加。

func main() {
	map2 := make(map[string]string)
	map2["n1"] = "zhangsan1"
	fmt.Println(map2) //  map[n1:zhangsan1]
	map2["n1"] = "zhangsanupdete"
	fmt.Println(map2) //  map[n1:zhangsanupdete]
}

删除. 内置函数delete

fmt.Println(map2) //  删除前:map[n1:zhangsanupdete n2:zhangsan2 n3:zhangsan2444]
delete(map2,"n3")
fmt.Println(map2) // 删除后:  map[n1:zhangsanupdete n2:zhangsan2]

删除的 细节: 删除所有的元素

  1. 如果我们要删除map的所有key ,没有一个专门的方法一次删除,可以遍历一下key,逐个删除
  2. 或者Tmap = make(…),make一个新的,让原来的成为垃圾,被gc回收
map2 := make(map[string]string)
map2["n1"] = "zhangsan1"
fmt.Println(map2) //  map[n1:zhangsan1]
map2 = make(map[string]string)
fmt.Println(map2) //  map[]

map 的查找
查找成功:true 。
查找失败:flase


map2 := make(map[string]string)
	map2["n1"] = "zhangsan1"
	value, err := map2["n1"]
	if err {
		fmt.Println("对应的value:", value) // 对应的value: zhangsan1
	} else {
		fmt.Println("没有找到:", err) // 没有找到: false
	}

你可能感兴趣的:(golang,爬虫,开发语言)