Go语言
存储结构:
1、切片
切片是Go中重要的数据类型,每个切片对象内部都维护着:数组指针(切片的地址)、切片长度、切片容量三个数据
长度是目前存储的数量,容量是最大存储数量
在向切片中追加的数据个数大于容量时,内部会自动扩容且每次扩容都当前容量的两倍(当容量超过1024时每次扩容则只增加当前容量的1/4容量),注意扩容之后地址会改变
切片的常见操作:
长度和容量:
len(v1)\cap(v1)
索引:
根据长度确定索引,根据索引获取值并且可以修改值
············
切片:切片得到的切片的内部数据地址是一致的
v2 := v1[1:3]
追加:append
删除:
//切片取前几位的时候地址是相同的
//但是后面赋值相当于给后面的覆盖掉了,所以v1也变了,但删除一位之后相当于最后会有重复的值
插入:
但是这种插入效率低下,所以插入操作尽可能不要用切片,用链表或者循环
变量赋值:
这种地址是不同的
整型、布尔类型、浮点型、字符串:
赋值也是重新开辟内存存储数据
数组:也是重新开辟内存,修改一者另一者不变
切片虽然地址不同,但是他内部存储的指针依然指向的是同一块地址,但是如果扩容的话就会重新开辟区域了
所以,目前学到的数据类型中,只有切片在修改内部元素时,会造成所有的赋值变量同时修改(不扩容的情况下)
切片和数组的区别:
切片修改数据时会导致所有赋值变量同时修改,且切片会自动扩容,数组在声明的时候容量定死了
Map(字典)类型:
键值对
这种类型最大的特点就是查找速度非常快,因为她的底层存储是基于哈希表存储的 (哈希表是取模+拉链法共同作用的)
特点:
键不能重复、键必须可哈希(目前所学习的可以哈希的有:int/bool/string/array)、无序
声明&初始化:
另外,键也可以是数组
常见操作:
长度:len
容量:cap会报错,因为容量是会重新计算的
但是容量在你刚开始设置上的时候,会计算出合适的容量(所以设置的容量并不一定是最终的容量
增删改查:
嵌套:
value中的嵌套:
key中的嵌套:
(键不重复,键可哈希)
map原理:整体存储结构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗