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

相关推荐
哥不想学算法1 小时前
【C++】字符串字面量拼接
开发语言·c++
AI云海2 小时前
利用好手机这个工具-碎片化学习
学习
gugucoding3 小时前
21. 【C语言】打包不同类型:结构体
c语言·开发语言
Brookty3 小时前
【JavaEE】线程安全(一).4:写块串行保安全、CAS
java·开发语言·java-ee·多线程·线程安全
F20226974864 小时前
西门子 PLC 与 C# 通信
开发语言·c#
gugucoding4 小时前
31. 【C语言】堆栈与队列的实现
c语言·开发语言·数据结构·链表
β添砖java4 小时前
2025最新快速构建企业级虚拟专用网络环境学习笔记
笔记·学习
万联WANFLOW5 小时前
多分支企业组网,IP 网段到底该怎么规划
开发语言·php
阿里嘎多学长5 小时前
2026-07-07 GitHub 热点项目精选
开发语言·程序员·github·代码托管