Go语言基础map用法及示例详解
作者:枫少文 发布时间:2024-04-26 17:33:37
标签: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)
}
总结
map必须借助make分配内存空间,否则是nil
字面量初始化必修保证key是唯一的,否则error
map传递的是引用,就是说形参会改变实参的值
直接对map对象使用[]操作符获得的对象不能直接修改状态
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)
}
}
来源:https://blog.csdn.net/guofeng93/article/details/91048896


猜你喜欢
- 为什么要实现分页?在大部分网站中分页的功能都是必要的,尤其是在后台管理中分页更是不可或缺分页能带给用户更好的体验,也能减轻服务器的压力对于分
- 本文实例讲述了python妹子图简单爬虫实现方法。分享给大家供大家参考。具体如下:#!/usr/bin/env python#coding:
- 水仙花数是指一个 3位正整数,它的每个位上的数字的 3 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)下面用一句代码
- 前言最近项目中遇到用 SQL Server的程序,以前没用过这个数据库,于是尝试将其转换为 MySQL 的格式,可是不想在本地安装 SQL
- 每个被捕获的参数将被作为纯Python字符串来发送,而不管正则表达式中的格式。 举个例子,在这行URLConf中:(r'^artic
- 一、配置Git:1、对于首次安装git的机器,一定要首先进行用户账户信息的配置:git config --global user.name
- 爬取过程:你好,李焕英 短评的URL:https://movie.douban.com/subject/34841067/comments?
- 一、Sql Server中的日期与时间函数 1. 当前系统日期、时间 select getdate() 2. dateadd 在向指定日期加
- 1.指定GPU运算如果安装的是GPU版本,在运行的过程中TensorFlow能够自动检测。如果检测到GPU,TensorFlow会尽可能的利
- 阅读:Dreamweaver量身打造Wordpress留言板(一)虽然说在Dreamweaver量身打造Wordpress留言板(二)这一篇
- 如下所示:>>> item={} ; items=[] #先声明一个字典和一个列表,字典用来添加到列表里面&g
- 第一步:字母转数字英文字母转对应数字相对简单,可以在命令行输入一行需要转换的英文字母,然后对每一个字母在整个字母表中匹配,并返回相应的位数,
- 1.安装step1step 2 首先是更改安装地址,推荐安装在D盘,如果和我一样C盘容量大的话,也可以不改,直接点击【Next】😄step3
- 1.交换变量值2.将一列表中的所有元素拼接成字符串3.查找list中最高频率的值4.检查两个单词是否是字谜(组成的字母和对应数量一致)5.反
- 顺序表即线性表的顺序存储结构。它是通过一组地址连续的存储单元对线性表中的数据进行存储的,相邻的两个元素在物理位置上也是相邻的。比
- 最小化安装Python8后安装Python3.8.1,网上找了一圈教程,没有一个能完全成功的。或者能安装成功,但pip无法使用。最后根据多个
- 微信网页授权认证根据微信官方文档,网页授权需要四个步骤, - 用户同意授权-获取code - 通过code 获取网页授权access_tok
- 1、类有两个方法,一个是 new,一个是 init,有什么区别,哪个会先执行呢?class test(object): &nb
- 概述在数据库当中,索引就跟树的目录一样用来加快数据的查找速度,对于一个SQL查询操作,根据索引快速过滤掉不符合要求的数据并定位到符合要求的数
- 一、Json和struct互换(1)Json转struct例子:package main import ( &qu