go语言学习(map)

map初始化定义

go 复制代码
package main

import "fmt"

func main() {
	//标准定义
	var nameMap map[string]string = map[string]string{
		"1": "张三",
		"2": "李四",
		"3": "王五",
	}
	fmt.Println(nameMap) //map[1:张三 2:李四 3:王五]

	//声明并赋值
	var nameMap1 = map[string]string{}
	fmt.Println(nameMap1) //map[]

	//简短声明
	nameMap2 := map[string]string{}
	fmt.Println(nameMap2) //map[]

	//make函数初始化
	nameMap3 := make(map[string]string)
	fmt.Println(nameMap3)//map[]
}

注意:go语言中map定义时必须初始化!!!否则后续使用会报错!!!

go 复制代码
	var nameMap4 map[string]string
	nameMap4["name"] = "123" //报错panic: assignment to entry in nil map
	fmt.Println(nameMap4)
  • 只声明了一个map变量,但没有初始化

  • 此时aMap的值是nil(零值)

  • nil的map赋值会导致运行时panic

这里简单提一嘴,go语言中map底层的数据结构是哈希表。

map取值

直接使用\[\]就可获取对于key的value

go 复制代码
	var nameMap map[string]string = map[string]string{
		"1": "张三",
		"2": "李四",
		"3": "王五",
	}
	fmt.Println(nameMap) //map[1:张三 2:李四 3:王五]

	fmt.Println(nameMap["2"])//李四

如果访问一个不存在的key会怎么样?

go 复制代码
	var nameMap map[string]string = map[string]string{
		"1": "张三",
		"2": "李四",
		"3": "王五",
	}
	fmt.Println(nameMap) //map[1:张三 2:李四 3:王五]

	fmt.Println(nameMap["2"])         //李四
	fmt.Printf("%#v\n", nameMap["4"]) //""

注意:当访问一个不存在的key时是不会像C++一样往里面插入的。

那如果我的map里面本来就有一个key对于的value是空字符串该如何区分呢?

go 复制代码
	var nameMap map[string]string = map[string]string{
		"1": "张三",
		"2": "李四",
		"3": "王五",
		"4": "",
	}
	tmp1, ok1 := nameMap["4"]
	fmt.Printf("%#v\n", tmp1) //""
	fmt.Println(ok1)          //true

	tmp2, ok2 := nameMap["5"]
	fmt.Printf("%#v\n", tmp2) //""
	fmt.Println(ok2)          //false

如上所示,map的\[\]是有两个返回值的,第一个返回值会返回对于key的value,第二个会返回这个key是否存在的bool值。

相关推荐
huangdong_13 分钟前
1688商品图片采集技术解析:登录态处理与SKU图自动分类
开发语言
马士兵教育14 分钟前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
chase_my_dream25 分钟前
C++ + SLAM 高频面试问题整理
开发语言·c++·面试
Cloud_Shy6181 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法
lizhihai_991 小时前
股市学习心得-AI 产业链核心标的梳理清单
大数据·服务器·人工智能·科技·学习
天佑木枫1 小时前
15天Python入门系列 · 序
开发语言·python
吃好睡好便好2 小时前
说说科学爬山
学习·生活
宋拾壹2 小时前
同时添加多个类目
android·开发语言·javascript
lunzi_08262 小时前
【学习笔记】《Python编程 从入门到实践》第8章:函数定义、参数传递与模块导入
笔记·python·学习
凡人叶枫3 小时前
Effective C++ 条款04:确定对象被使用前已先被初始化
java·linux·开发语言·c++·嵌入式开发