当前位置: 首页 > news >正文

Golang-数组与切片

数组与切片

数组

所谓数组,即内存上一块连续的存储空间。使用方式

// 声明数组
var nums [3]int// 数组赋值
nums[0] = 1
nums[1] = 2
nums[2] = 3// 输出数组元素
for i:=0; i<3; i++ {fmt.Println(nums[i]) //1、2、3
}

我们可以利用数组批量处理数据,看似很方便,但数组在实际的工程项目中是很鸡肋的,因为它无法动态改变长度,也就是无法扩容。

比如我现在想再加一个数字“4”,如果你这样做

nums[3] = 4

这段代码编译的时候会直接报“数组越界”的错误,因为数组的长度是在声明的时候就已经决定好的,声明后就不能再改变数组的长度了。

invalid argument: index 3 out of bounds [0:3]

从内存管理的角度来看,当你声明nums数组的时候,内存会直接分配一段固定的连续空间,也就是长度是无法再修改的了。假如这段空间不固定,我们可以继续在其后面存储数据,那这段代码有可能导致其他应用崩溃,因为它有可能覆盖掉其他应用的内存数据,这是十分危险的行为。

那么我们该怎么把4放入nums中呢?重新声明一个长度为4的数组呗

// 声明一个长度为10的数组
var newNums [10]int// 将nums的元素拷贝进newNums中
for i:=0; i<3; i++ {newNums[i] = nums[i]
}// 把4放入newNums中
newNums[3] = 4// 输出数组元素
for i:=0; i<4; i++ {fmt.Println(newNums[i]) //1、2、3、4
}

上面的代码我们先重新声明了一个长度为4的数组newNums,然后将nums的元素放入到newNums,最后将4放入newNums。这个方法其实相当于我们手动将nums扩容。

虽然我们现在实现了手动扩容数组,但是还有一个问题,如果后续我们要加入5、6、7、8、9...总不能每次都写这么一段代码吧,而且频繁的分配内存也是不可取的。就像你去银行取钱,你预计这个月要支出30万,但单天只需要1万,你总不能一天取一万,这个月每天都跑一趟吧,其时间成本是非常高的。最好的办法其实就是一次多取一些钱,当然,也不一定要一次性全取出,因为30万是预计金额,所以是有够花和不够花两种结果的。那么,我们代码再改一下

// 声明一个长度为4的数组
var newNums [10]int// 将nums的元素拷贝进newNums中
for i:=0; i<3; i++ {newNums[i] = nums[i]
}// 把4放入newNums中
newNums[3] = 4// 输出数组元素
for i:=0; i<4; i++ {fmt.Println(newNums[i]) //1、2、3、4
}newNums[4] = 5
newNums[5] = 6
newNums[6] = 7
newNums[7] = 8
// 输出数组元素
for i:=0; i<8; i++ {fmt.Println(newNums[i]) //1、2、3、4
}

Ok,现在数组使用起来是不是方便了一些?但我们不能每使用一个数组都来这么一套,所以我们需要拿出编程界的扛把子思维——封装。

但这里我就不封装了,别问为什么,因为这非常麻烦,而且我很懒,不想写。那怎么办?我们需要拿出编程界的另一个扛把子思维——不要重复造轮子or站在巨人的肩膀上。是的,这一套已经有人封装好了,而且是go底层支持的,那就是——切片!

切片

我们先看一下切片的结构:

type slice struct {array unsafe.Pointer // 元素指针len   int // 长度 cap   int // 容量
}

我们可以把切片看作是上面手动扩容数组过程的封装,比如我们使用切片的时候是这样使用的

更新中...

http://www.zskr.cn/news/37380.html

相关文章:

  • SVM多分类准确率优化方案-
  • 2025年靠谱的白刚玉磨料用户口碑最好的厂家榜
  • Django外键反向查询机制解析
  • 2025年质量好的旅游观光车厂家最新TOP排行榜
  • 2025年11月填料厂家最新推荐,实力品牌深度解析采购无忧之选!
  • 2025 年 11 月填料厂家最新推荐,精准检测与稳定性能深度解析
  • 2025年知名的彩印包装品牌厂家排行榜
  • ​如何安装 telnet-0.17-65.el7_8.x86_64.rpm(CentOS 7 RPM 安装详细步骤)​
  • 2025年比较好的生涯规划教具创新与应用榜
  • 2025年知名的密码家用智能门锁厂家选购指南与推荐
  • 2025 年 11 月电缆绝缘材料厂家最新推荐,聚焦高端定制需求与全案交付能力
  • 2025 年 11 月电缆绝缘材料厂家最新推荐,实力品牌深度解析采购无忧之选!
  • 2025年评价高的课桌椅厂家推荐及选购指南
  • 2025年靠谱的机械重型纸箱厂家最新TOP实力排行
  • 2025年口碑好的耐酸涂料厂家选购指南与推荐
  • 2025年评价高的重型反弹器厂家最新实力排行
  • 2025年评价高的室外冰雕厂家推荐及采购指南
  • 2025年评价高的轻奢全品类五金高评价厂家推荐榜
  • 2025年质量好的小批量职业装定制厂家推荐及选购参考榜
  • 2025年知名的程控型平板硫化机厂家最新推荐排行榜
  • 2025年口碑好的竹纤维降解垃圾袋厂家最新权威推荐排行榜
  • 2025年热门的单玻玻璃隔断厂家实力及用户口碑排行榜
  • 2025年靠谱的MC减速机厂家最新权威实力榜
  • 2025年靠谱的SPOKE充磁实力厂家TOP推荐榜
  • 2025 年 11 月门窗十大品牌榜单揭晓,聚焦核心性能与用户口碑的权威解读
  • 2025年口碑好的压榨机设备厂家推荐及选购指南
  • 2025年口碑好的工业净化铝材厂家最新推荐权威榜
  • Linux 内核中sched_prio_to_weight转换关系
  • 2025年质量好的隐藏三节轨最新TOP厂家排名
  • 2025年评价高的犁厂家最新TOP排行榜