go map

一、什么是map

1.map是key-value数据结构,又称为字段或关联数组。 类似于其他语言的集合,类似集合,所以是无序的。

二、map的声明

1.声明语法: var mapname map[ keytype ] valuetype

var mymap map[string]string

2.map的key可以是很多种类型的,  如:bool、int、string、指针、channel ,接口、结构体、数组。通常为int 和 string。

但是请注意:slice、map、function 绝对不可以作为map的key,因为这几个没法用 ==来判断出key

3.map的value可以是多种类型。 如:bool、int、string、指针、channel ,接口、结构体、数组、slice、map、function

三、map的初始化

1.map声明后,需要make()函数初始化后才能正常使用。

2.map没有make初始化,读取值是空,进行赋值操作会panic

	var mymap map[string]string        //声明
	mymap = make(map[string]string)    //make初始化
	mymap["a"] = "golang"              //赋值
	fmt.Println(mymap["a"])            //读取

	var test map[string]string         //声明
	fmt.Println(test["a"])             //未初始化,读取到的值为空
	test["a"] = "golang"               //未初始化,panic : assignment to entry in nil map

四、map的使用方式:三种

1.先声明、再make初始化

2.直接声明并make初始化

3.直接声明并make初始化+赋值

	//1.声明  再初始化
	var mymap map[string]string
	mymap = make(map[string]string)
	mymap["a"] = "golang"
	fmt.Println(mymap["a"])

	//2.声明并初始化
	//var mymap2 map[string]string = make(map[string]string)
	//可直接推导类型初始化
	mymap2 := make(map[string]string)
	mymap2["a"] = "java"
	fmt.Println(mymap2["a"])

	//3.声明并初始化+赋值
	//var mymap3 map[string]string = map[string]string {"a":"php"}
	//可直接推导类型初始化
	mymap3 := map[string]string {"a":"php"}
	fmt.Println(mymap3["a"])

五、map的curd(增删改查)

1.添加和修改:key存在时就修改,不存在时就添加

	mymap := make(map[string]string)
	mymap["a"] = "java"      //添加
	mymap["b"] = "golang"    //添加
	mymap["c"] = "php"       //添加
	fmt.Println(mymap["a"])  //查看 java

	mymap["a"] = "js"        //修改
	fmt.Println(mymap["a"])  //查看 js

2.删除,内置函数 delecte( mapname , key )

注意:delete函数,删除的key如果存在则删除,不存在则不操作,但是不会报错,没有返回值

	mymap := make(map[string]string)
	mymap["a"] = "java"      //添加
	mymap["b"] = "golang"    //添加
	mymap["c"] = "php"       //添加
	delete(mymap,"a")   //删除  没有返回值
	fmt.Println(mymap["a"])  //查看 为空
	fmt.Println(mymap)       //查看 map[b:golang c:php]

3.查看

3.1注意:查看不存在的值时为 零值,从map中取值如不确定key是否存在时需要先判断  value,ok := mymap["a"],如果存在 ok == true   不存在 ok == false

	mymap := make(map[string]int)
	mymap["a"] = 1           //添加
	fmt.Println(mymap["b"])  //查看 0
	fmt.Println(mymap)       //查看 map[a:1]

	value,ok := mymap["c"]   //map中取值
	fmt.Println(ok)          //false
	fmt.Println(value)       //零值 0

	value2,ok2 := mymap["a"]  //map中取值
	fmt.Println(ok2)          //true
	fmt.Println(value2)       //1

3.2 遍历: map 的key是无序的,遍历map只能用 for range  不能用for(map的key不是整形数字)。

3.3 map的长度 使用 len() 内置函数计算。如果map没有初始化(分配内存) 长度为0

	lang := make(map[string]string)
	lang["a"] = "golang"
	lang["b"] = "java"
	lang["c"] = "php"
	lang["d"] = "js"

	//第一次遍历
	for index,value := range lang {
		fmt.Println(index,"----",value)
	}
	fmt.Println("----------------")
	//第二次遍历
	for index2,value2 := range lang {
		fmt.Println(index2,"----",value2)
	}

	fmt.Println(len(lang))   //已有键值对数:4

	//没有初始化的map
	var mymap map[string]string
	fmt.Println(len(mymap))  //没有初始化的map长度为0

执行结果为:

 六、map是引用类型

函数传参为map 对传入的map进行修改,则外部的map同步修改,所以它是引用类型

package main

import "fmt"

func change(m map[string]string) {
	m["b"] = "c++"
}

func main() {
	lang := make(map[string]string)
	lang["a"] = "golang"
	lang["b"] = "java"
	lang["c"] = "php"
	lang["d"] = "js"
	change(lang)
	fmt.Println(lang["b"])  // c++
	fmt.Println(lang)  //map[a:golang b:c++ c:php d:js]
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值