Go语言基础map用法及示例详解


Posted in Golang onNovember 17, 2021

Go语言基础map用法及示例详解

概述

  • map是基于key-value键值对的无序的集合
  • Go语言中的map是引用类型
  • 必须初始化才能使用。

语法

声明和初始化

配合make使用,否则是nil

var map[KeyType]ValueType
//KeyType:表示键的类型
//ValueType:表示键对应的值的类型
make(map[KeyType]ValueType, [cap])
//cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量
//当你的容量超过时会自动扩充

例子:

//1.声明
var name1 map[int]string   //key是int,value是string
var name2 map[string]string  //key是string,value是string
//字面量
names3:=map[int]string{0:"张三",1:"李四"}
//2.分配内存
name1 = make(map[int]string, 2)         //2:map的容量,当你的容量超过时会自动扩充
name2 = make(map[string]string, 2)
//3.赋值
//3.1 通过KeyType赋值
name1[0]="张三"   //key:0   value:张三
name1[1]="李四"   //key:1   value:李四
name1[2]="王五"   //key:2   value:王五    //已经超过了分配的的容量,会自动扩充
name2["A"]="张三"
name2["B"]="李四"

读取

根据KeyType来读取

如果keyType存在,就返回那个值,如果不存在,返回类型默认值值

fmt.Println(name1[0])
fmt.Println(name2["B"])

测试map中key值是否存在

通过KeyType来取值时,会返回两个值,一个是vlue,另一个是是否存在的bool

if value, ok := name1[5]; ok {
	fmt.Println("存在这个值",value)
} else {
	fmt.Println("不存在这个值", value)
}

删除

delete(map[int]string,[KeyType])

例子

delete(name1 , 1)

遍历

range

例子:

for key,value:=range name1 {
	fmt.Printf("key=%d,value=%s\n",key,value)
}
for key,value:=range name2 {
	fmt.Printf("key=%s,value=%s\n",key,value)
}

总结

  1. map必须借助make分配内存空间,否则是nil
  2. 字面量初始化必修保证key是唯一的,否则error
  3. map传递的是引用,就是说形参会改变实参的值
  4. 直接对map对象使用[]操作符获得的对象不能直接修改状态
  5. map中存储指针而不是结构体

示例

package main
import "fmt"
func main() {
	//一、声明和初始化【配合make使用,否则是nil】
	//1.声明
	var name1 map[int]string    //key是int,value是string
	var name2 map[string]string //key是string,value是string
	//2.分配内存
	name1 = make(map[int]string, 2) //2:map的容量,当你的容量超过时会自动扩充
	name2 = make(map[string]string, 2)
	//3.赋值
	//3.1 通过KeyType赋值
	name1[0] = "张三" //key:0   value:张三
	name1[1] = "李四" //key:1   value:李四
	name1[2] = "王五" //key:2   value:王五    //已经超过了分配的的容量,会自动扩充
	name2["A"] = "张三"
	name2["B"] = "李四"
	//二、读取
	//	1. 根据KeyType来读取,如果keyType存在,就返回那个值,如果不存在,返回类型默认值值
	fmt.Println(name1[0])
	fmt.Println(name2["B"])
	//	2. 测试map中key值是否存在【通过KeyType来取值时,会返回两个值,一个是vlue,另一个是是否存在的bool】
	if value, ok := name1[2]; ok {
		fmt.Println("存在这个值", value)
	} else {
		fmt.Println("不存在这个值", value)
	}
	//三、删除
	delete(name1, 1)  //删除了李四
	delete(name2, "C")   //没有这个C
	fmt.Println(name1)
	fmt.Println(name2)
	//四、遍历
	for key,value:=range name1 {
		fmt.Printf("key=%d,value=%s\n",key,value)
	}
	for key,value:=range name2 {
		fmt.Printf("key=%s,value=%s\n",key,value)
	}
}

以上就是Go语言基础map用法及示例详解的详细内容,更多关于Go语言基础的资料请关注三水点靠木其它相关文章!

Golang 相关文章推荐
golang interface判断为空nil的实现代码
Apr 24 Golang
go语言-在mac下brew升级golang
Apr 25 Golang
Go语言中break label与goto label的区别
Apr 28 Golang
goland 设置project gopath的操作
May 06 Golang
Golang全局变量加锁的问题解决
May 08 Golang
浅谈Go语言多态的实现与interface使用
Jun 16 Golang
Go语言设计模式之结构型模式
Jun 22 Golang
golang中的struct操作
Nov 11 Golang
golang三种设计模式之简单工厂、方法工厂和抽象工厂
Apr 10 Golang
golang语言指针操作
Apr 14 Golang
Golang实现可重入锁的示例代码
May 25 Golang
Go中使用gjson来操作JSON数据的实现
Aug 14 Golang
Go语言基础函数基本用法及示例详解
Nov 17 #Golang
golang中的struct操作
Nov 11 #Golang
Go 语言中 20 个占位符的整理
Oct 16 #Golang
Golang中channel的原理解读(推荐)
Oct 16 #Golang
Go语言并发编程 sync.Once
Oct 16 #Golang
Go 通过结构struct实现接口interface的问题
Oct 05 #Golang
golang实现一个简单的websocket聊天室功能
You might like
PHP读取目录下所有文件的代码
2008/01/07 PHP
php获取mysql版本的几种方法小结
2008/03/25 PHP
php动态生成JavaScript代码
2009/03/09 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
2013/08/01 PHP
php实现字符串翻转的方法
2015/03/27 PHP
php实现网站文件批量压缩下载功能
2015/10/28 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
关于 文本框默认值 的操作js代码
2012/01/12 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
兼容主流浏览器的JS复制内容到剪贴板
2014/12/12 Javascript
javascript实现checkbox全选的代码
2015/04/30 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
使用百度地图实现地图网格的示例
2018/02/06 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
python 布尔操作实现代码
2013/03/23 Python
Python中__call__用法实例
2014/08/29 Python
Python map和reduce函数用法示例
2015/02/26 Python
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
Python使用plotly绘制数据图表的方法
2017/07/18 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
增大python字体的方法步骤
2020/07/05 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
租车协议书范本2014
2014/11/17 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
用Python提取PDF表格的方法
2021/04/11 Python