Golang基础-6

地平线RDKX3初始配置与USB无线网卡 地平线X3无线网卡配置 阅读详情

Go语言基础

介绍

基础

介绍

  • 本文介绍Go语言中map(映射)(map声明、map初始化、map基础操作)等相关知识。

基础

map(映射)
  • map 是无序的、存储键值对(key/value)形式,类似其它语言中的字典或散列表。
  • 通过 key 来对 value 进行操作(增、删、改、查)。
  • map 的 key 一般为基础数据类型,函数、map、切片及包含这三种的自定义结构体类型不能作为 key,自定义类型也可以作为key,value 可以为任意类型。
  • map的底层实现是hash table,根据 key 查找 value 的时间复杂度是O(1)。
map声明
  • 需要指定 key 和 value 的类型,
  • 声明后 map 会自动初始化为 nil,表示此映射不存在
  • cap()函数不能用于 map
package main

import (
	"fmt"
	"reflect"
)

func main() {
	// map 声明,未初始化时,默认为 nil,映射不存在
	var mp1 map[int]int
	fmt.Println("mp1: ", mp1, ", mp1 == nil: ", mp1 == nil, ", type: ", reflect.TypeOf(mp1))
}

输出结果
mp1: map[] , mp1 == nil: true , type: map[int]int

map声明、map初始化
  • map初始化方式具体如下
package main

import "fmt"

func main() {
	// 使用字面量初始化
	mp1 := map[int]int{1: 10, 2: 20, 3: 30}
	fmt.Printf("mp1 type: %T, value: %v, len: %v\n", mp1, mp1, len(mp1))

	mp2 := map[[2]int]int{}
	fmt.Printf("mp2 type: %T, value: %v, len: %v\n", mp2, mp2, len(mp2))

	// 不允许使用切片等引用数据类型作为 key
	// mp3 := map[[]int]int{}

	// 使用 make 创建 map
	mp4 := make(map[int]int)
	fmt.Printf("mp4 type: %T, value: %v, len: %v\n", mp4, mp4, len(mp4))

	// 使用 make 创建 map,指定其长度
	mp5 := make(map[int]int, 3)
	fmt.Printf("mp5 type: %T, value: %v, len: %v\n", mp5, mp5, len(mp5))
}

输出结果
mp1 type: map[int]int, value: map[1:10 2:20 3:30], len: 3
mp2 type: map[[2]int]int, value: map[], len: 0
mp4 type: map[int]int, value: map[], len: 0
mp5 type: map[int]int, value: map[], len: 0

map基础操作
  • 获取 map 中元素的数量
package main

import "fmt"

func main() {
	// 获取元素数量,使用 len 函数
	mp := map[int]int{1: 10, 2: 20, 3: 30}
	fmt.Println("mp : ", mp)
	fmt.Println("mp len: ", len(mp))
}

输出结果
mp : map[1:10 2:20 3:30]
mp len: 3

  • 通过 key 访问 map 元素,当 key 不存在时,返回 value 类型的默认初始值
package main

import "fmt"

func main() {
	// 访问 map 元素
	mp := map[int]int{1: 10, 2: 20, 3: 30}
	fmt.Println("mp[1] : ", mp[1])
	fmt.Println("mp[2] : ", mp[2])
	fmt.Println("mp[3] : ", mp[3])
	// key 4 不存在
	fmt.Println("mp[4] : ", mp[4])
}

输出结果
mp[1] : 10
mp[2] : 20
mp[3] : 30
mp[4] : 0

  • 修改、增加 map 中的元素,两者操作方式相同
package main

import "fmt"

func main() {
	mp := map[int]int{1: 10, 2: 20, 3: 30}
	fmt.Println("mp : ", mp)
	// 修改 map 中元素
	mp[1] = 100
	mp[3] = 300
	fmt.Println("mp : ", mp)

	// 增加 map 中的元素
	mp[5] = 100
	mp[7] = 300
	mp[9] = 900
	fmt.Println("mp : ", mp)
}

输出结果
mp : map[1:10 2:20 3:30]
mp : map[1:100 2:20 3:300]
mp : map[1:100 2:20 3:300 5:100 7:300 9:900]

  • 删除 map 中的元素,通过 key ,使用 delete 函数
package main

import "fmt"

func main() {
	mp := map[int]int{1: 10, 2: 20, 3: 30}
	fmt.Println("mp : ", mp)
	// 删除 map 中元素
	delete(mp, 1)
	fmt.Println("mp : ", mp)

	// 清空 map
	clear(mp)
	fmt.Println("mp clear: ", mp)

	// 指向 nil,由垃圾机制自动回收
	mp2 := map[int]int{1: 10, 2: 20, 3: 30}
	mp2 = nil
	fmt.Println("mp nil: ", mp2)

	mp3 := map[int]int{1: 10, 2: 20, 3: 30}
	mp4 := mp3
	fmt.Println("mp3: ", mp3)
	fmt.Println("mp4: ", mp4)
	delete(mp3, 1)
	fmt.Println("mp3: ", mp3)
	fmt.Println("mp4: ", mp4)
}

输出结果
mp : map[1:10 2:20 3:30]
mp : map[2:20 3:30]
mp clear: map[]
mp nil: map[]
mp3: map[1:10 2:20 3:30]
mp4: map[1:10 2:20 3:30]
mp3: map[2:20 3:30]
mp4: map[2:20 3:30]

  • map 查询
package main

import "fmt"

func main() {
	mp2 := map[int]string{1: "10", 2: "20", 3: "30"}

	// map 查询,key 不存在
	a, b := mp2[4]
	fmt.Printf("a: %v, b: %v\n", a, b)

	// 	map 查询,key 存在
	c, d := mp2[3]
	fmt.Printf("c: %v, d: %v\n", c, d)
}

输出结果
a: , b: false
c: 30, d: true

  • map 元素遍历
package main

import "fmt"

func main() {
	mp := map[int]int{1: 10, 2: 20, 3: 30}
    // 使用 for-range 遍历 map
	for i, v := range mp {
		fmt.Printf("mp[%v] = %v\t", i, v)
	}
}

输出结果
mp[1] = 10 mp[2] = 20 mp[3] = 30

  • 使用 map 赋值给一个 map 变量,底层元素共享
package main

import "fmt"

func main() {
	// 使用 map 赋值给一个 map 变量
	mp3 := map[int]int{1: 10, 2: 20, 3: 30}
	mp4 := mp3
	fmt.Println("mp3: ", mp3)
	fmt.Println("mp4: ", mp4)
	delete(mp3, 1)
	fmt.Println("mp3: ", mp3)
	fmt.Println("mp4: ", mp4)

	mp4[10] = 100
	fmt.Println("mp3: ", mp3)
	fmt.Println("mp4: ", mp4)

	fmt.Println("mp3: ", mp3)
	fmt.Println("mp4: ", mp4)

	clear(mp4)
	fmt.Println("mp3: ", mp3)
	fmt.Println("mp4: ", mp4)
}

输出结果
mp3: map[1:10 2:20 3:30]
mp4: map[1:10 2:20 3:30]
mp3: map[2:20 3:30]
mp4: map[2:20 3:30]
mp3: map[2:20 3:30 10:100]
mp4: map[2:20 3:30 10:100]
mp3: map[2:20 3:30 10:100]
mp4: map[2:20 3:30 10:100]
mp3: map[]
mp4: map[]

起始

Qemu开发ARM篇-5、buildroot制作根文件系统并挂载启动 在上一篇中,我们编译了kernel,并在qemu上进行了运行,但到最后,在挂载根文件系统时候,挂载失败,这是因为我们还没有根文件系统,在本章中,我们将制作根文件系统。rootfs制作方式有很多方式,如busyBoxbuildrootYocto等,在该篇章中,我们使用buildroot来制作根文件系统,主要考虑到busyBox制作完还需要手动首改一些启动配置比较繁琐,而Yocto如果电脑配置不是很好,编译时间过长,比较麻烦。 阅读详情

相关推荐

研究生研一学习机器学习ML、深度学习DL的规划

研究生学习机器学习DL、深度学习DL的规划 保上研之后也没有很好规划自己的学习路线,看到b站上的一位清华博士讲述他本科也是机械跨考计算机的学习路线,所以记录下来,从现在开始按照规划来一点一点地做好。 掌握python(推荐一周) 1.1 面向对象编程 廖雪峰python网站: https://www.liaoxuefeng.com 1.2 数据分析Numpy numpy 100题: https://www.yanxishe.com/columnDetail/24784 1.3数据分析pandas pan

没有最好,只有更好 3099

golang语言中map的初始化及使用

golang语言中map的初始化及使用

我的博客 4万+

uni-app蓝牙MTU设置失效探因:从20字节限制到跨设备兼容性实战

本文深入探讨了uni-app蓝牙开发中MTU设置失效的常见问题,特别是20字节限制的成因及解决方案。通过分析设备兼容性、蓝牙协议栈特性和系统版本差异,提供了智能延迟策略、设备特征检测和渐进式MTU提升等实战方案,帮助开发者优化蓝牙数据传输效率。

weixin_29289821的博客 288

[Go学习]map的声明和初始化

map map 是一种无序的键值对的集合。 map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值。 map是一种集合,因此我们可以像迭代数组和切片那样迭代它。不过,map是无序的,我们无法决定它的返回顺序,这是因为map是用哈希表来实现的。 map是引用类型,可以使用如下方式声明: //[keytype] 和 valuetype 之间允许有空格。 var mapname map[keytype]valuetype 其中: mapname为map的变量名。 keytype为键类型。

EI_Capitan的博客 6925

别再乱选WiFi信道了!手把手教你用WiFi Analyzer优化2.4G/5G家庭网络(附避坑指南)

本文详细介绍了如何使用WiFi Analyzer工具优化家庭WiFi网络,解决2.4GHz和5GHz信道的冲突问题。通过分析信道拥堵原因、提供安装使用指南及优化策略,帮助用户显著提升网络速度与稳定性,特别适合密集住宅区和多设备家庭。

weixin_42665725的博客 5882

SAP WM模块配置详解

1.给工厂/存储地点分配仓库编码 功能说明 配置路径 IMG>企业结构>分配>分配后勤执行>给工厂/存储地点分配仓库编码 业务示例 配置步骤 2.定义仓库号码控制参数 功能说明 配置路径 IMG>后勤执行>仓库管理>主数据>主数据>定义仓库号码控制参数 业务示例 配置步骤 3.定义编码范围 功能说明 配置路径 IMG>后勤执行>仓库...

weixin_40672823的博客 2万+

Go_map集合初始化、键值操作、map作为函数参数的使用

Golang——map集合初始化、键值操作、map作为函数参数的使用 map是一种无序的键值对集合,键是不允许重复的,map是通过hash实现的 map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值

itzhuzhu的博客 3157

逆向工程实战:解密AppleAccount的X-MMe-Nas-Qualify签名生成机制

本文通过逆向工程实战,详细解析了AppleAccount服务中X-MMe-Nas-Qualify签名的生成机制。作者利用Frida进行动态追踪定位签名源头,结合IDA Pro进行静态分析,并借助LLDB动态调试还原核心算法。文章最终分享了如何独立于苹果官方库,通过Python代码复现签名算法,为自动化测试和深度交互苹果服务的开发者提供了关键技术路径。

weixin_29323049的博客 707

GO:Map

map的key和value可以是相同的类型,也可以不同函数类型、map 类型自身,以及切片类型是不能作为 map的 key 类型的(他们只支持和nil的比较,不支持同类型的两个变量的比较)2.map变量的声明和初始化如果只声明没有初始化,默认为nil,但是map并不支持初值为零值 nil 的切片类型变量,可以借助内置的 append 的函数进行操作,这种在 Go 语言中被称为“所以我们必须对map类型的变量进行显示出实话后才能使用。

bx13099003035的博客 622

S7-PLCSIM Advanced V3.0虚拟PLC组态下载失败?手把手教你解决IP地址冲突问题

本文针对S7-PLCSIM Advanced V3.0组态下载失败问题,深入剖析了IP地址冲突的根本原因。通过对比博途项目PLC、虚拟网卡及本机物理网卡的IP配置,提供了清晰的排查流程与标准化解决方案,帮助用户快速修复网络可达性问题,确保虚拟PLC仿真顺利进行。

weixin_29306261的博客 193

Moviepy自动化剪辑视频中的广告

本教程展示了如何使用 Python 中的 MoviePy 库,通过检测和剪辑广告段落来实现视频内容的清洁播放。通过广告检测算法和 MoviePy 剪辑功能的结合,可以自动化处理视频,极大提升编辑效率。在学习和应用中,理解广告检测的原理及其实现方法尤为重要,以便针对不同类型的视频进行调整。此外,MoviePy 的灵活性使其适用于多种视频编辑场景,适合自动化内容制作与优化。

Mr数据杨 3413

Golang深入浅出之-掌握Go语言Map:初始化、增删查改与遍历

Go语言中的map是一种非常实用的数据结构,它提供了基于键值对的快速查找、插入和删除功能。在实际编程中,熟练掌握map的初始化、增删查改操作以及遍历方法对于提升代码效率和可读性至关重要。本篇文章将深入浅出地探讨这些主题,同时揭示常见问题、易错点及相应的规避策略,并通过丰富的代码示例进行演示。

zevjay的博客 1856

【BlueZ】编译产物详解:可执行文件/库文件/工具的生成路径与用途

BlueZ二次开发编译产物机制解析 摘要:在BlueZ蓝牙协议栈二次开发中,90%的报错源于对编译产物类型和路径的混淆。本文系统剖析BlueZ的三阶段编译机制:1)配置阶段生成Makefile;2)编译阶段在.libs目录下产生临时库和可执行文件(不可直接运行);3)安装阶段将产物部署到系统标准路径。重点解析守护进程、命令行工具、动态库的核心路径差异,并针对五大高频问题(如临时库运行崩溃、动态库不匹配、系统覆盖等)给出解决方案。

byte轻骑兵的技术小窝 1万+

【Go】P6 Golang 基础:流程控制

流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,可以说是一门语言的"经脉"。Go 语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制。if-else: 条件分支的基础,支持在条件中声明变量for: 唯一的循环关键字,涵盖所有循环场景,包括传统循环、类 while 循环和for range迭代switch:优雅的多分支选择,默认不穿透,支持多值匹配和表达式判断:控制循环执行流程,支持标签跳转goto。

weixin_43098506的博客 1988

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Go最全【VxWorks5(6),Golang基础72问

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新如果你需要这些资料,可以戳这里获取 .CEEMPTY LIST: .CS ----------- | head------------------ | | | | tail---------- |

2401_84925977的博客 401

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

非零基础自学Golang 第6章 Go语言内置容器 6.1 数组

非零基础自学Golang 第6章 Go语言内置容器 6.1 数组

代码改变世界 448

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

非零基础自学Golang 第6章 Go语言内置容器 6.2 切片

非零基础自学Golang 第6章 Go语言内置容器 6.2 切片

代码改变世界 286

非零基础自学Golang 第6章 Go语言内置容器 6.3 映射

非零基础自学Golang 第6章 Go语言内置容器 6.3 映射

代码改变世界 263

非零基础自学Golang 第6章 Go语言内置容器 6.4 小结 & 6.5 知识拓展

非零基础自学Golang 第6章 Go语言内置容器 6.4 小结 & 6.5 知识拓展

代码改变世界 447

100天精通Golang(基础入门篇)——第6天: 深入解析Go语言中的运算符

100天精通Golang(基础入门篇)——第6天: 深入解析Go语言中的运算符,本文将介绍Golang中的各种运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符。我们还将探讨运算符的优先级,以帮助读者更好地理解和使用Golang的运算符。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 5万+

非零基础自学Golang 第2章 安装和运行Go 2.6 编写第一个Go 程序

非零基础自学Golang 第2章 安装和运行Go 2.6 编写第一个Go 程序

代码改变世界 363

Golang基础(6)

有时你并不关心一个值的特定类型。你不需要关心它是什么。你只需要知道它能做特定的事情。你能够在其上调用特定的接口。不需要关心是pen还是pencil,你仅仅需要一个Draw方法。不需要关心是Car还是Boat,你只需要一个Steer方法。 那就是Go接口的目标。它允许你定义能够保存任何类型的变量和函数参数,前提是它定义了特定的方法。 我们被思乡情绪淹没了,所以我们创建一个gadget包来帮助我们思乡。它包含一个模拟录音机的类型和另一个模拟播放器的类型。 只能接受一种类型方法参数 我们定义一个playList函

肖恩123的博客 417

Golang基础6-反射

Golang基础6-反射

m0_61973596的博客 778

Go 基础 6 函数

6 函数 6.1 介绍 Go里面有三种类型的函数: 1.普通的带有名字的函数 2.匿名函数或lambda函数 3.方法(Methods) 除了main()、init()函数外,其他所有类型的函数都可以有参数与返回值。函数参数,返回值和它们的类型统称为函数签名。 注意:Go里面不允许函数重载(编写多个同名函数,它们拥有不同的形参或不同的返回值),会导致编译错误。不支持的原因是:函数重载需要进行多余的类型匹配影响性能。 函数也可以 以声明的形式被使用,作为一个函数类型 type f func(int,int)

qq_39657702的博客 255

6Go语言基础之数组

本文是李文周的博客go语言学习之路的目录提要版,方便复习查看使用,原文参见文章连接: https://www.liwenzhou.com/posts/Go/go_menu/ 本文主要介绍Go语言中数组(array)及它的基本使用。 数组总结 数组定义: var a [3]int var b [4]int a = b //不可以这样做,因为此时a和b是不同的类型 数组初始化: var array1...

weixin_42426385的博客 225

Go语言基础6 - 并发

概述 我们将用几节来学习Go语言基础,本文结构如下: 1. 并发 通过通信共享内存 Go程 信道 信道中的信道 并行化 可能泄露的缓冲区 2. 错误 Panic 恢复 1. 并发 1.1 通过通信共享内存 在并发编程中,为实现对共享变量的正确访问需要精确的控制,这在多数环境下都很困难。 实际上,多个独立执行的线程从不会主动共享。Go语言另辟蹊径,它...

张云飞Vir的专栏 200
上一篇: Golang基础-5
下一篇: Golang基础-7
无夜_
博客等级 码龄7年 2916粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值