Go语言学习笔记 --- map

CAN与UDS诊断协议:从底层通信到车载测试实战解析 CAN总线作为车载网络的底层通信骨干,负责ECU之间可靠的数据传输;UDS协议则定义了统一的诊断服务规范。理解两者的层级关系与协同机制,是车载网络测试和嵌入式开发的关键基础。从CAN报文的仲裁机制、位时序配置、终端电阻匹配,到UDS服务的物理寻址与功能寻址、会话切换、安全访问、DTC状态位解析,再到刷写流程和NRC排查,环环相扣。掌握这些原理,能显著提升诊断脚本开发、总线故障定位和自动化测试的效率。借助CANoe、python-can、cantools等工具链,可实现从原始报文抓取到DBC解析、从UDS模拟 阅读详情

学习笔记根据 无闻 go语言基础教程 整理

map

  • 类似其他语言中的哈希表或字典,以key-value的形式存储数据
  • key必须是支持==或!=比较运算的类型,不可以是函数、map或slice
  • map查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍
  • map使用make() 创建,支持:=这种简写方式。
  • make([keyType]valueType,cap), cap表示容量,可省略。
  • 超出容量时会自动扩容,但尽量提供一个合理的初始值。
  • 使用len() 获取元素个数
  • 键值对不存在时自动添加,使用delete() 删除某键值对。
  • 使用for range对map和slice进行迭代操作
  • 示例代码:
package main

import (
    "fmt"
    "sort"
)

func main() {
    test1()
    test2()
    test3()
    test4()
    test5()
    test6()
    test7()
    test8()
    test9()
    test10()
    test11()
}

// 普通创建方式
func test1() {
    var m map[int]string // 中括号里面的是key的类型,外面string是value的类型
    m = map[int]string{}
    fmt.Println(m) // map[]
}

// 使用make关键字创建
func test2() {
    var m map[int]string
    m = make(map[int]string)
    fmt.Println(m) // map[]
}

// 直接声明和赋值创建
func test3() {
    var m map[int]string = make(map[int]string)
    fmt.Println(m) // map[]
}

// 使用更简单的方式
func test4() {
    m := make(map[int]string)
    fmt.Println(m) // map[]
}

func test5() {
    m := make(map[int]string)
    m[1] = "OK"
    a := m[1]
    b := m[2]

    fmt.Println(m) // map[1:OK]
    fmt.Println(a) // OK
    fmt.Println(b) //  // 空的字符串什么也没有
    fmt.Println("------")
    // 中途删除
    delete(m, 1) // 第一个参数是map对象,第二个参数是key
    fmt.Println(a) //  OK // a是字符串的变量,还在
    fmt.Println(m[1]) //  // 删除之后,map中的key为1的值没有了。
}

// 复杂类型map
func test6() {
    var m map[int]map[int]string
    m = make(map[int]map[int]string)
    m[1] = make(map[int]string) // 此处是为了使用make初始化里面的map
    m[1][1] = "OK"
    a := m[1][1]
    fmt.Println(a) // OK
    fmt.Println("....")
}

// 使用多返回值来判断map是否被初始化
func test7() {
    var m map[int]map[int]string
    m = make(map[int]map[int]string)
    a, ok := m[2][1] // 此时并未被初始化
    fmt.Println(a, ok) //  false // 输出一个空值和false
    if !ok {
        m[2] = make(map[int]string)
    }
    m[2][1] = "OK"
    a, ok = m[2][1]
    fmt.Println(a, ok) // OK true // 此处被正确初始化了
}

// 迭代操作
func test8() {
    s1 := []int{1,2,3}
    for i,v:=range s1{
        fmt.Println(i, v)
    }
    fmt.Println("----")
    m1 := make(map[int]string)
    m1[1] = "Hello"
    m1[2] = "World"
    for k,v:=range m1{
        fmt.Println(k, v)
    }
    /*
    // 输出结果为:
    0 1
    1 2
    2 3
    ----
    1 Hello
    2 World

    */


}

// 以map为值的slice类型
func test9() {
    sm := make([]map[int]string, 2)
    for i,v := range sm{
        v = make(map[int]string, 1)
        v[i] = "OK"
        fmt.Println(v)
    }
    fmt.Println("----")
    fmt.Println(sm)
    /*
    map[0:OK]
    map[1:OK]
    ----
    [map[] map[]]

    */

    // 通过上面的运行结果可知, v是map中一个索引的拷贝,改变v,并不改变map,slice同样是这样。
}

func test10() {
    sm := make([]map[int]string, 2)
    for k := range sm{
        sm[k] = make(map[int]string, 1)
        sm[k][k] = "OK"
        fmt.Println(sm[k])
    }
    fmt.Println("----")
    fmt.Println(sm)
    /*
    map[0:OK]
    map[1:OK]
    ----
    [map[0:OK] map[1:OK]]

    */
}

// 对map进行间接排序,map是无序的,通过key来排序
func test11() {
    m := map[int]string{1:"a", 2:"b", 3:"c", 4:"d", 5:"e"} // 创建一个map
    s := make([]int,len(m)) // 创建一个slice
    i := 0
    for k,_ := range m {
        s[i] = k
        i++
    }
    sort.Ints(s) // 对s进行排序
    fmt.Println(s)
    fmt.Println("----")
    // 根据拍好序的k,取出对应map中的值,从而达到对map的排序
    for _, v := range s {
        fmt.Println(m[v])
    }
    /*
    [1 2 3 4 5]
    ----
    a
    b
    c
    d
    e

    */
}
LangFlow开源神器:拖拽构建AI Agent与MCP协议集成实战 LangFlow 15万星开源神器:拖拽搭建 AI Agent,一键部署 API / MCP / JSON 在AI应用开发领域,传统编码方式往往需要处理复杂的API调用、数据处理和流程编排,这让很多开发者望而却步。LangFlow作为GitHub上获得15万星的开源项目,通过可视化拖拽的方式彻底改变了AI Agent的开发体验。本文将完整介绍如何使用LangFlow快速构建功能强大的AI Agent,并实现API、MCP协议和JSON配置的一键部署。 1. LangFlow与AI Agent核心概念解析 1 阅读详情

相关推荐

基于STM32F407的立创球形六足双形态机器人:从Morphex复刻到毕业设计的完整开发指南

本文详细介绍了基于STM32F407主控芯片,从零开始复刻Morphex球形六足双形态机器人的完整开发过程。内容涵盖硬件选型(如总线舵机)、机械结构设计(阿基米德螺旋底盘)、软件控制(逆运动学与步态算法)以及多控制方式集成,为嵌入式系统与机器人开发的毕业设计或爱好者提供了全面的实战指南。

weixin_35414260的博客 322

go 语言学习笔记⑦----映射(map)

文章目录go 语言学习笔记⑦----映射(map)使用make赋值遍历是否存在删除做函数参数 go 语言学习笔记⑦----映射(map) 键值对,映射(类c++中的map ) map[keyType]valueType keyType 不可以是切片了, 函数以及包含切片的结构类型 eg mp := map[int]string{} 无序存储 使用 只有len没有cap package main import ( "fmt" ) func main() { mp := map[int]string{}

qq_52410477的博客 362

24位ADC的精度陷阱:为什么你的ADS1232实测性能不达标?

本文深入探讨了24位ADC芯片ADS1232在实际应用中性能不达标的原因,揭示了高精度ADC性能依赖周边电路设计的关键问题。通过分析电源系统、参考电压稳定性、PCB布局等常见陷阱,提供了优化方案和调试技巧,帮助工程师充分发挥ADS1232的潜力,实现接近理论值的测量精度。

weixin_28285943的博客 409

【go语言学习笔记】map

1.map的定义 go语言内置有map这种数据结构,它由无序的键值对组成,跟大部分语言中的map用法非常相似。 它的键不能由可变类型(引用语义)的结构类型担当,如切片、数组、函数等等。 map只有len,没有cap。 我们可以直接定义,或者通过make函数创建,通过make函数创建时,可以指定容量。 package main import "fmt" func main() { // 无序结...

Code杂货店 263

计算机保研/考研面试题——计算机组成原理篇

本文总结了985和华五学校习计算机保研/考研常问面试时的计算机组成原理题,欢迎点赞、收藏、评论、关注

安晴晚风的博客 7548

MTK Linux Charger驱动分析(二) - power_supply_core.c

的核心作用可以概括为:提供统一的电源管理框架;管理电源设备注册、属性访问、事件通知;封装sysfs 接口和 uevent 通知,屏蔽硬件细节;驱动开发者只需要实现,不关心底层通知和接口细节。简单来说,它是电源子系统的“大脑和中枢”,具体的电池/充电器只是“信息源”。

iTom1900 1491

Go语言学习笔记——map

map是散列表的引用,map的类型为map[K]V,K和V是字典的键和值对应的数据类型, map中所有的键都拥有相同的数据类型,同时所有的值都拥有相同的数据类型, 但键的类型和值的类型不一定相同 键的类型K必须是可以通过操作符==来进行比较的数据类型, 所以map可以检测某一个键是否已经存在 初始化 内置函数make创建 ages := make(map[string]int) // 创建一个...

westbrookliu的博客 226

goahead(嵌入式Web服务器)之文件传输篇

goahead文件上传原理: 使用html form即表单提交文件上传请求,web服务器核心处理接收客户端Post过来的文件数据(注意post的是二进制数据),最后,web服务器把接收到文件数据以二进制格式写到服务器本端存储系统。 goahead文件上传步骤: 1、创建upload.html文件,内容如下: <html> <head> <meta charset="utf-8"/> <title>Upload</title> </head&g

weixin_40732273的博客 3496

GO语言学习笔记——map_1

GO语言学习笔记——map_1 暑假在学go,做个记录笔记,直接上代码 func main() { good:=make(map[string]int,3)//make方法初始化一个map,第二个参数为capacity而不是len score:=map[string]int{"张三":100,"李四":56,"王五":78} pass:=make(map[string]int,3...

weixin_43256892的博客 183

uniapp - 热更新提示:WGT安装包中manifest.json文件不存在 | unexpected EOF!报错详细解决,完美搞定WGT安装包中WWW目录下manifest.json不存在问题

uniapp,安卓android,苹果ios,热更新,热更新code:-1202报错,,WGT热更新报错,uniapp热更新wgt出现报错manifest.json文件不存,uniapp安卓苹果软件热更新时出现错误unexpected EOF!如何解决,怎么解决热更新wgt报错,app新版本下载安装报错WGT安装包中manifest.json文件不存在,WGT安装包中WWW目录下manifest.json不存在,uniapp热更新报错安装失败[-1201]:WGT/WGTU文件格式错误,uniapp-wgt

✅ 精选推荐文章 1万+

构建自己的 Qt 插件系统

Qt 本身提供了插件相关的技术,但并没有提供一个通用的插件框架!倘若要开发一个较大的 GUI 应用程序,并希望使其可扩展,那么拥有这样一个插件框架无疑会带来很大的好处。

青春不老,奋斗不止! 2万+

GO语言学习笔记——map_2

GO语言学习笔记——map_2 map的小用法记录: 1、factory go中map的value可以是一个匿名函数,因而利用这一点可以简单实现工厂模式 factory:=make(map[int]func(a int,b int)int,3) factory[1]= func(a int, b int)int { return a+b } factory[2]= func(a int, b...

weixin_43256892的博客 246

K230在原有LVGL控件触摸屏控制的基础上,增加USB鼠标控制!

搭配CanMV图形化编程,中小学生可快速开发“键鼠控制AI小游戏”“智能画板”等趣味项目,降低AI学习门槛;:HDMI屏幕+键鼠组合,直接在开发板上调试代码、修改ISP参数、查看AI推理日志,无需频繁连接电脑;:打造带交互的AI设备(如工业控制面板、智能显示器),鼠标操作菜单、键盘输入指令,体验媲美小型PC;:无网络场景下,通过键盘直接向AI设备录入数据、配置参数,适配野外监测、本地工控等场景。,自动识别、快速响应,完美适配交互控制、参数调试、数据输入等场景。

weixin_47446386的博客 149

GoLang学习笔记

本文全篇都是GoLang的学习笔记,主要从GoLang产生的背景、特性开始,将go语言学习划分成基础、进阶两个部分展开。主要针对有编程经验的开发人员食用更佳,目前暂定为学习大纲+知识点的形式罗列,后续考虑加入具体案例和思维导图表示层级关系。说明【?】标题中间带有?说明带有疑惑,【{}】标题层级中间带有{}说明是重点章节,【[]】标题层级中间带有[]说明章节中难度较高,建议仔细阅读。目录前言Go语言简介GoLang产生背景GoLang特性Go语言基础Go程序基本概念Go程序基本结构应用程序入口退出返回值。

阿凌哥哥 1153

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Go 语言学习笔记之字典 Map

map 是一种常用的数据结构,操作效率高。字典的键不能使用切片、函数或包含切片的结构体,原因是它们不支持等值运算。

A码农先森的专栏 601

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Go语言学习笔记(三)复杂数据类型切片和Map

本文介绍了Go语言中的指针类型和切片(slice)的使用方法。在指针部分,说明了指针的声明方式、内存地址特性及基本操作。在切片部分,详细讲解了切片的创建(make)、初始化、长度/容量扩展机制,以及切片与数组的关系,包括元素修改、循环处理等操作。最后简要介绍了map(映射)的基本用法,包括创建、遍历、查找和删除元素等操作。通过多个代码示例展示了这些特性的具体应用场景和输出结果。

不愿言弃-念何的博客 381

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Go语言学习笔记五--map

map的创建 func main() { //创建 map studens := map[string]string{ "name": "张三", "age": "18", "sex": "男", } //直接创建有值的map var m2 map[string]int //map == nil

cdzjava的博客 217

Go语言学习笔记-数组、切片、map

Go语言学习笔记-数组、切片、map 数组:同一数据类型元素的集合。是值类型,长度固定无法修改 声明格式:var 数组名字 [元素数量] 数据类型 var arr [3] int //声明定义了一个长度为3的int类型数组 数组初始化: var a = [3] int {1,2,3} b := [...]string {"北京","上海","广州"} //三个点有解释器自己判断数组长度 数组遍历: for index, value := range 数组名 index:索引,下标 value:

weixin_42523416的博客 187

Go语言学习笔记-007map

Go语言基础之map Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现。 map map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。 map定义 Go中map定义语法如下: map [keyType] ValueType 其中, KeyType: 表示建类型 ValueType: 表示键对应的值的类型 map类型的变量默认值为nil,需要使用make()函数来分配内存。 make(map[KeyType]ValueType, [

藤藤菜的专栏 966

go语言学习笔记-Map

scoreMap["陈翔"] = 100。scoreMap["陈佳佳"] = 11。在声明的时候直接填充元素 不使用make。是引用类型,必须初始化。1 使用map初始化。

m0_65136138的博客 286

Go语言学习笔记:3 map

一.语法基础 Go语言中 map的定义语法如下: map[KeyType]ValueType 1.KeyType:表示键的类型 2.ValueType:表示键对应的值的类型。 map类型的变量默认初始值为nil,需要使用make()函数来分配内存: make(map[KeyType]ValueType, [cap]) 二.基本的使用 声明后添加元素: func main() { scoreMap := make(ma...

xiaotian2333333的博客 818

Go语言学习笔记十三: Map集合

Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等。而Python语言直接就属于一种类型,写法上比Java还简单。 Go语言中Map的写法比Java简单些,比Python繁琐。 定义Map var x map[string]string x : = make(map[string]string) ...

kriszhang的博客 591

【Go语言学习笔记】深入理解 Go map:使用、底层原理与 Java Map 全面对比

从入门到深入剖析,一文读懂 Go 语言中的 map —— 从基本语法到底层结构,从内存管理到与 Java HashMap 的差异。

往者之不谏 来者犹可追 1105

go语言学习笔记-map

理解 map是由一组无序的键key值value对集合的内置类型,可以通过键来获取对应的值,map和slices一样,也是引用类型 注意:map之间不能使用==操作符来判断   创建map 语法:map[type of key]type of value var myMap map[string]int //nil 此时map是零值,不允许向map向添加元素,我们需要使用make函数...

Willing_wmh的博客 346

go语言学习笔记五 数组,切片,map

1 数组 值类型 package main import "fmt" func main() { // 数组定义 名称 [数量] 类型 var array1 [5] int // 数组定义 名称 [数量] 类型 初始化 array2 := [3] int{1,3,5} // 数组定义多个int ... array3 := [...] int{2,4,6,8,10} // 二位数组...

安安静静敲代码 209

GO string 转map_go语言学习笔记(18)-二维数组和map

二维数组二维数组在声明/定义时有对应四种写法(类似一维数组)var 数组名 [大小][大小]类型 = [大小][大小]类型{{初值...},{初值...}}var 数组名 [大小][大小]类型 = [...][大小]类型{{初值...},{初值...}}var 数组名 = [大小][大小]类型{{初值...},{初值...}}var 数组名 = [...][大小]类型{{初值...},...

weixin_39640911的博客 530
上一篇: 改变一生的经济学规律
下一篇: Go语言学习笔记 --- function
Wang's Blog
博客等级 码龄12年 7438粉丝 2422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值