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

相关推荐
布莱克6053 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
LabVIEW开发3 小时前
LabVIEW 局部变量为何引发竞争条件?四种同步机制
开发语言·labview
benchmark_cc4 小时前
A 股、港股、美股如何建立统一的标的主数据格式?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
前进的李工5 小时前
Agent 学习笔记 05:系统提示词应该怎么写
笔记·学习·prompt·agent·个人开发·few-shot·ai应用开发
Zenova EdgeOS5 小时前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
取名真是5 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
FRing036 小时前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
正在走向自律7 小时前
【3/5】人工智能训练师 三级/高级工 考证学习方向:从“独立执行”到“设计、归因与全链条负责”
人工智能·学习·人工智能训练师·注方案设计·数据质控负责人·模型评测与调优辅助·ai训练项目交付
Fatbobman(东坡肘子)7 小时前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift
揽星河..7 小时前
【C语言】底层程序设计
c语言·开发语言