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值。

相关推荐
古城小栈2 小时前
rustup 命令工具,掌控 Rust 开发环境
开发语言·后端·rust
克里斯蒂亚诺·罗纳尔达2 小时前
智能体学习21——知识检索(RAG)
人工智能·学习·ai
Jackyzhe2 小时前
从零学习Kafka:认证机制
分布式·学习·kafka
lly2024062 小时前
NumPy 高级索引
开发语言
深蓝海拓2 小时前
基于QtPy (PySide6) 的PLC-HMI工程项目(八)在上位机中解析上行报文
网络·笔记·python·学习·plc
XY_墨莲伊2 小时前
【编译原理】实验二:基于有穷自动机FA词法分析器设计与实现
c语言·开发语言·c++·python
广州灵眸科技有限公司2 小时前
瑞芯微(EASY EAI)RV1126B 网络摄像头方案
开发语言·网络·科技·嵌入式硬件·物联网
少许极端3 小时前
算法奇妙屋(四十五)-CCPC备战之旅-1
java·开发语言·算法
U盘失踪了3 小时前
go 常量
开发语言·后端·golang