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 相关文章推荐
一文读懂go中semaphore(信号量)源码
Apr 03 Golang
go语言中切片与内存复制 memcpy 的实现操作
Apr 27 Golang
解决Golang中ResponseWriter的一个坑
Apr 27 Golang
go结构体嵌套的切片数组操作
Apr 28 Golang
golang goroutine顺序输出方式
Apr 29 Golang
Go语言基础知识点介绍
Jul 04 Golang
入门学习Go的基本语法
Jul 07 Golang
go开发alertmanger实现钉钉报警
Jul 16 Golang
Go语言基础函数基本用法及示例详解
Nov 17 Golang
浅谈GO中的Channel以及死锁的造成
Mar 18 Golang
Go gorilla securecookie库的安装使用详解
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使用array_merge重新排列数组下标的方法
2015/07/22 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
JS弹出层的显示与隐藏示例代码
2013/12/27 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
js获取当前日期时间及其它操作汇总
2015/04/17 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
关于数据与后端进行交流匹配(点亮星星)
2016/08/03 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
node中koa中间件机制详解
2017/08/22 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
AngularJs 禁止模板缓存的方法
2017/11/28 Javascript
JS写谷歌浏览器chrome的外挂实例
2018/01/11 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
python发送arp欺骗攻击代码分析
2014/01/16 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
python 下载文件的几种方法汇总
2021/01/06 Python
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
生物技术毕业生自荐信
2013/10/23 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
2021/11/11 HTML / CSS