go语言学习经验分享-5 [数组/切片] -- [len/cap]
想了一下还是把两个内容和到一起来分享
内容一:
之前说了 数组和切片 这两个东西其实很好理解
1、数组是一个固定长度的序列
2、切片是数组的一个引用
就可以理解数组是一个安保队 一个安保队有10个人 他们是一个实体 是真是存在的
var team = [10]{1,2,3,4,5,6,7,8,9,10}
那切片就可以理解成安保队长,安保队长也是一个实体 但是他可以调度使用安保队的人
var teamLeader = team[:]
var teamLeader = team[1:3]
var teamLeader = team[:5]
var teamLeader = team[3:]
当安保队长teamLeader 作出操作得时候 保安队team也跟着相应的变化
比如说他瞧不上team站在第一的那小子 1 他要把 第一个位置留给自己的小舅子 100
teamLeader[0] = 100
这时候 team 就变成了 小舅子站在第一位
[100 2 3 4 5 6 7 8 9 10]
内容二:
len() 和 cap()
首先要知道什么是 len 什么是cap ?
答:
len 可以用来查看 数组或切片的长度
cap 可以用来查看 数组或切片的容量
问题又来了 什么是长度什么是容量?
这里理解懂的人自己出去玩去、不会的留下
举个栗子🌰
容量就好比水杯、长度就好比水杯里的水
所以说 水杯只能装下他所属容量的水 好比500ml的水杯 只能装500ml的水
反过来讲 len <= cap
如果我有600ml的水 我要装进水杯
这时候只能再拿一个杯子 用两个杯子
一个杯子装 500毫升的水 一个杯子装 100毫升的水
就是说 len = 600,cap = 1000
所以append追加切片超过cap限制容量时 重新分配的cap容量会是之前的2倍
这时候切片的内存地址会发生改变 可以理解 内容一 中的队长为5个小舅子安排工作
每个安保队名额限制 10人 多出来的人 就安排在B队里
因为队长从管理一个队变成管理两队 所有变成了安保经理 title变了 对应切面内存地址改变
代码链接 https://github.com/tebie6/education/blob/master/demo/base/len_cap.go